dvander@18: /* dvander@18: * Copyright (C) 2012 David Anderson dvander@18: * dvander@18: * This file is part of JITCraft. dvander@18: * dvander@18: * JITCraft is free software: you can redistribute it and/or modify it under dvander@18: * the terms of the GNU General Public License as published by the Free dvander@18: * Software Foundation, either version 3 of the License, or (at your option) dvander@18: * any later version. dvander@18: * dvander@18: * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY dvander@18: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@18: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@18: * dvander@18: * You should have received a copy of the GNU General Public License along with dvander@18: * JITCraft. If not, see http://www.gnu.org/licenses/. dvander@18: */ dvander@18: #include "Reference.h" dvander@18: #include "Zone.h" dvander@18: #include "Array.h" dvander@18: #include "Heap-inl.h" dvander@18: dvander@59: using namespace ke; dvander@18: dvander@18: Reference * dvander@18: Reference::NewStack(Zone *zone, void *location, Heap::Tenure tenure) dvander@18: { dvander@39: Local ref(zone, Reference::cast(zone->allocate(MapKind_Reference, sizeof(Reference), tenure))); dvander@39: if (!ref) dvander@18: return NULL; dvander@18: dvander@18: ref->location_ = location; dvander@18: return ref; dvander@18: } dvander@18: dvander@18: Reference * dvander@18: Reference::NewStack(Zone *zone, const LocalSlot &slot, Heap::Tenure tenure) dvander@18: { dvander@39: Local ref(zone, Reference::cast(zone->allocate(MapKind_Reference, sizeof(Reference), tenure))); dvander@39: if (!ref) dvander@18: return NULL; dvander@18: dvander@18: ref->location_ = &ref->slot_; dvander@18: ref->slot_ = slot; dvander@18: return ref; dvander@18: } dvander@18: dvander@18: Reference * dvander@39: Reference::NewArray(Zone *zone, Handle base, size_t index, Heap::Tenure tenure) dvander@18: { dvander@39: Local ref(zone, Reference::cast(zone->allocate(MapKind_Reference, sizeof(Reference), tenure))); dvander@39: if (!ref) dvander@18: return NULL; dvander@18: dvander@18: ref->location_ = base->slotPtr(index); dvander@18: ref->base_ = base; dvander@18: return ref; dvander@18: }