Handleize Reference.
authorDavid Anderson <dvander@alliedmods.net>
Tue Jul 03 01:00:02 2012 -0700 (2012-07-03)
changeset 39158f476b92b3
parent 38 88049d677e3f
child 40 ce787d61fb71
Handleize Reference.
jitcraft/Interpreter.cpp
jitcraft/Reference.cpp
jitcraft/Reference.h
     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  };