Handleize Reference.
Handleize Reference.
1.1 --- a/jitcraft/Interpreter.cpp Tue Jul 03 00:56:24 2012 -0700
1.2 +++ b/jitcraft/Interpreter.cpp Tue Jul 03 01:00:02 2012 -0700
1.3 @@ -1,4 +1,5 @@
1.4 -/*
1.5 +/* vim: set ts=4 sw=4 tw=99 et:
1.6 + *
1.7 * Copyright (C) 2012 David Anderson
1.8 *
1.9 * This file is part of JITCraft.
1.10 @@ -522,7 +523,8 @@
1.11
1.12 case OP_ARRAYREF_LIFO:
1.13 {
1.14 - Reference *ref = Reference::NewArray(ZONE(), top.sp[-2].array, top.sp[-1].i32, Heap::Tenure_Stack);
1.15 + Local<Array> array(ZONE(), top.sp[-2].array);
1.16 + Local<Reference> ref(ZONE(), Reference::NewArray(ZONE(), array, top.sp[-1].i32, Heap::Tenure_Stack));
1.17 if (!ref) {
1.18 assert(false);
1.19 return false;
2.1 --- a/jitcraft/Reference.cpp Tue Jul 03 00:56:24 2012 -0700
2.2 +++ b/jitcraft/Reference.cpp Tue Jul 03 01:00:02 2012 -0700
2.3 @@ -25,11 +25,10 @@
2.4 Reference *
2.5 Reference::NewStack(Zone *zone, void *location, Heap::Tenure tenure)
2.6 {
2.7 - Object *obj = zone->allocate(MapKind_Reference, sizeof(Reference), tenure);
2.8 - if (!obj)
2.9 + Local<Reference> ref(zone, Reference::cast(zone->allocate(MapKind_Reference, sizeof(Reference), tenure)));
2.10 + if (!ref)
2.11 return NULL;
2.12
2.13 - Reference *ref = Reference::cast(obj);
2.14 ref->location_ = location;
2.15 return ref;
2.16 }
2.17 @@ -37,24 +36,22 @@
2.18 Reference *
2.19 Reference::NewStack(Zone *zone, const LocalSlot &slot, Heap::Tenure tenure)
2.20 {
2.21 - Object *obj = zone->allocate(MapKind_Reference, sizeof(Reference), tenure);
2.22 - if (!obj)
2.23 + Local<Reference> ref(zone, Reference::cast(zone->allocate(MapKind_Reference, sizeof(Reference), tenure)));
2.24 + if (!ref)
2.25 return NULL;
2.26
2.27 - Reference *ref = Reference::cast(obj);
2.28 ref->location_ = &ref->slot_;
2.29 ref->slot_ = slot;
2.30 return ref;
2.31 }
2.32
2.33 Reference *
2.34 -Reference::NewArray(Zone *zone, Array *base, size_t index, Heap::Tenure tenure)
2.35 +Reference::NewArray(Zone *zone, Handle<Array> base, size_t index, Heap::Tenure tenure)
2.36 {
2.37 - Object *obj = zone->allocate(MapKind_Reference, sizeof(Reference), tenure);
2.38 - if (!obj)
2.39 + Local<Reference> ref(zone, Reference::cast(zone->allocate(MapKind_Reference, sizeof(Reference), tenure)));
2.40 + if (!ref)
2.41 return NULL;
2.42
2.43 - Reference *ref = Reference::cast(obj);
2.44 ref->location_ = base->slotPtr(index);
2.45 ref->base_ = base;
2.46 return ref;
3.1 --- a/jitcraft/Reference.h Tue Jul 03 00:56:24 2012 -0700
3.2 +++ b/jitcraft/Reference.h Tue Jul 03 01:00:02 2012 -0700
3.3 @@ -34,10 +34,9 @@
3.4 Barriered<Array> base_;
3.5
3.6 public:
3.7 - // :TODO: handles
3.8 static Reference *NewStack(Zone *zone, void *location, Heap::Tenure tenure = Heap::Tenure_Default);
3.9 static Reference *NewStack(Zone *zone, const LocalSlot &slot, Heap::Tenure tenure = Heap::Tenure_Default);
3.10 - static Reference *NewArray(Zone *zone, Array *base, size_t index, Heap::Tenure tenure = Heap::Tenure_Default);
3.11 + static Reference *NewArray(Zone *zone, Handle<Array> base, size_t index, Heap::Tenure tenure = Heap::Tenure_Default);
3.12
3.13 int getInt() {
3.14 return *reinterpret_cast<int *>(location_);
3.15 @@ -53,7 +52,7 @@
3.16 }
3.17
3.18 static inline Reference *cast(Object *obj) {
3.19 - assert(obj->is(MapKind_Reference));
3.20 + assert(!obj || obj->is(MapKind_Reference));
3.21 return reinterpret_cast<Reference *>(obj);
3.22 }
3.23 };