| Index: vm/object.h
|
| ===================================================================
|
| --- vm/object.h (revision 3046)
|
| +++ vm/object.h (working copy)
|
| @@ -39,38 +39,52 @@
|
| initializeHandle(this, value); \
|
| ASSERT(IsNull() || Is##object()); \
|
| } \
|
| + static object& Handle(Isolate* islt, Raw##object* raw_ptr) { \
|
| + object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle(islt)); \
|
| + initializeHandle(obj, raw_ptr); \
|
| + return *obj; \
|
| + } \
|
| static object& Handle() { \
|
| - return Handle(object::null()); \
|
| + return Handle(Isolate::Current(), object::null()); \
|
| } \
|
| static object& Handle(Raw##object* raw_ptr) { \
|
| - object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle()); \
|
| - initializeHandle(obj, raw_ptr); \
|
| - return *obj; \
|
| + return Handle(Isolate::Current(), raw_ptr); \
|
| } \
|
| - static object& CheckedHandle(RawObject* raw_ptr) { \
|
| - object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle()); \
|
| + static object& CheckedHandle(Isolate* islt, RawObject* raw_ptr) { \
|
| + object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle(islt)); \
|
| initializeHandle(obj, raw_ptr); \
|
| if (!obj->Is##object()) { \
|
| FATAL("Handle check failed."); \
|
| } \
|
| return *obj; \
|
| } \
|
| - static object& ZoneHandle() { \
|
| - return ZoneHandle(object::null()); \
|
| + static object& CheckedHandle(RawObject* raw_ptr) { \
|
| + return CheckedHandle(Isolate::Current(), raw_ptr); \
|
| } \
|
| - static object& ZoneHandle(Raw##object* raw_ptr) { \
|
| - object* obj = reinterpret_cast<object*>(VMHandles::AllocateZoneHandle()); \
|
| + static object& ZoneHandle(Isolate* isolate, Raw##object* raw_ptr) { \
|
| + object* obj = reinterpret_cast<object*>( \
|
| + VMHandles::AllocateZoneHandle(isolate)); \
|
| initializeHandle(obj, raw_ptr); \
|
| return *obj; \
|
| } \
|
| - static object& CheckedZoneHandle(RawObject* raw_ptr) { \
|
| - object* obj = reinterpret_cast<object*>(VMHandles::AllocateZoneHandle()); \
|
| + static object& ZoneHandle() { \
|
| + return ZoneHandle(Isolate::Current(), object::null()); \
|
| + } \
|
| + static object& ZoneHandle(Raw##object* raw_ptr) { \
|
| + return ZoneHandle(Isolate::Current(), raw_ptr); \
|
| + } \
|
| + static object& CheckedZoneHandle(Isolate* isolate, RawObject* raw_ptr) { \
|
| + object* obj = reinterpret_cast<object*>( \
|
| + VMHandles::AllocateZoneHandle(isolate)); \
|
| initializeHandle(obj, raw_ptr); \
|
| if (!obj->Is##object()) { \
|
| FATAL("Handle check failed."); \
|
| } \
|
| return *obj; \
|
| } \
|
| + static object& CheckedZoneHandle(RawObject* raw_ptr) { \
|
| + return CheckedZoneHandle(Isolate::Current(), raw_ptr); \
|
| + } \
|
| static Raw##object* null() { \
|
| return reinterpret_cast<Raw##object*>(Object::null()); \
|
| } \
|
| @@ -202,24 +216,33 @@
|
| return VMHandles::IsZoneHandle(reinterpret_cast<uword>(this));
|
| }
|
|
|
| + static Object& Handle(Isolate* isolate, RawObject* raw_ptr) {
|
| + Object* obj = reinterpret_cast<Object*>(VMHandles::AllocateHandle(isolate));
|
| + obj->SetRaw(raw_ptr);
|
| + return *obj;
|
| + }
|
| +
|
| static Object& Handle() {
|
| - return Handle(null_);
|
| + return Handle(Isolate::Current(), null_);
|
| }
|
|
|
| static Object& Handle(RawObject* raw_ptr) {
|
| - Object* obj = reinterpret_cast<Object*>(VMHandles::AllocateHandle());
|
| + return Handle(Isolate::Current(), raw_ptr);
|
| + }
|
| +
|
| + static Object& ZoneHandle(Isolate* isolate, RawObject* raw_ptr) {
|
| + Object* obj = reinterpret_cast<Object*>(
|
| + VMHandles::AllocateZoneHandle(isolate));
|
| obj->SetRaw(raw_ptr);
|
| return *obj;
|
| }
|
|
|
| static Object& ZoneHandle() {
|
| - return ZoneHandle(null_);
|
| + return ZoneHandle(Isolate::Current(), null_);
|
| }
|
|
|
| static Object& ZoneHandle(RawObject* raw_ptr) {
|
| - Object* obj = reinterpret_cast<Object*>(VMHandles::AllocateZoneHandle());
|
| - obj->SetRaw(raw_ptr);
|
| - return *obj;
|
| + return ZoneHandle(Isolate::Current(), raw_ptr);
|
| }
|
|
|
| static RawObject* null() { return null_; }
|
| @@ -321,7 +344,7 @@
|
| // TODO(iposva): Implement real store barrier here.
|
| *addr = value;
|
| // Filter stores based on source and target.
|
| - if (raw()->IsOldObject() && value->IsNewObject()) {
|
| + if (value->IsNewObject() && raw()->IsOldObject()) {
|
| uword ptr = reinterpret_cast<uword>(addr);
|
| Isolate::Current()->store_buffer()->AddPointer(ptr);
|
| }
|
| @@ -373,8 +396,6 @@
|
| static RawClass* api_error_class_; // Class of ApiError.
|
|
|
| friend void RawObject::Validate() const;
|
| - friend class Class;
|
| - friend class SnapshotReader;
|
|
|
| // Disallow allocation.
|
| void* operator new(size_t size);
|
|
|