Make PopSirt inlinable, pass self to SirtRef.
Change-Id: Ieb91526b1cb1f8644ceb3c5b99649f658f43bbc1
diff --git a/src/stack_indirect_reference_table.h b/src/stack_indirect_reference_table.h
index 681405f..506f00a 100644
--- a/src/stack_indirect_reference_table.h
+++ b/src/stack_indirect_reference_table.h
@@ -17,30 +17,24 @@
#ifndef ART_SRC_STACK_INDIRECT_REFERENCE_TABLE_H_
#define ART_SRC_STACK_INDIRECT_REFERENCE_TABLE_H_
-#include "casts.h"
#include "logging.h"
#include "macros.h"
-#include "thread.h"
namespace art {
class Object;
+class Thread;
// Stack allocated indirect reference table. It can allocated within
// the bridge frame between managed and native code backed by stack
// storage or manually allocated by SirtRef to hold one reference.
class StackIndirectReferenceTable {
public:
- explicit StackIndirectReferenceTable(Object* object) {
- number_of_references_ = 1;
+ explicit StackIndirectReferenceTable(Object* object) : number_of_references_(1), link_(NULL) {
references_[0] = object;
- Thread::Current()->PushSirt(this);
}
- ~StackIndirectReferenceTable() {
- StackIndirectReferenceTable* sirt = Thread::Current()->PopSirt();
- CHECK_EQ(this, sirt);
- }
+ ~StackIndirectReferenceTable() {}
// Number of references contained within this SIRT
size_t NumberOfReferences() const {
@@ -98,28 +92,6 @@
DISALLOW_COPY_AND_ASSIGN(StackIndirectReferenceTable);
};
-template<class T>
-class SirtRef {
- public:
- explicit SirtRef(T* object) : sirt_(object) {}
- ~SirtRef() {}
-
- T& operator*() const { return *get(); }
- T* operator->() const { return get(); }
- T* get() const {
- return down_cast<T*>(sirt_.GetReference(0));
- }
-
- void reset(T* object = NULL) {
- sirt_.SetReference(0, object);
- }
-
- private:
- StackIndirectReferenceTable sirt_;
-
- DISALLOW_COPY_AND_ASSIGN(SirtRef);
-};
-
} // namespace art
#endif // ART_SRC_STACK_INDIRECT_REFERENCE_TABLE_H_