dvander@168: /* vim: set ts=4 sw=4 tw=99 et: dvander@168: * dvander@168: * Copyright (C) 2012 David Anderson dvander@168: * dvander@168: * This file is part of SourcePawn. dvander@168: * dvander@168: * SourcePawn is free software: you can redistribute it and/or modify it under dvander@168: * the terms of the GNU General Public License as published by the Free dvander@168: * Software Foundation, either version 3 of the License, or (at your option) dvander@168: * any later version. dvander@168: * dvander@168: * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY dvander@168: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@168: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@168: * dvander@168: * You should have received a copy of the GNU General Public License along with dvander@168: * SourcePawn. If not, see http://www.gnu.org/licenses/. dvander@168: */ dvander@168: #include "Box.h" dvander@168: #include "Zone.h" dvander@168: #include "Types.h" dvander@168: #include "Heap-inl.h" dvander@168: dvander@168: using namespace ke; dvander@168: dvander@168: Box *Box::New(Zone *zone, Handle type, int i32, Heap::Tenure tenure) dvander@168: { dvander@168: Local box(zone, Box::cast(zone->allocate(MapKind_Box, sizeof(Box), tenure))); dvander@168: if (!box) dvander@168: return NULL; dvander@168: dvander@168: assert(type->pod() == PrimitiveType_Int32); dvander@168: box->u.i32 = i32; dvander@168: box->type_ = type; dvander@168: return box; dvander@168: } dvander@168: dvander@168: Box * dvander@168: Box::New(Zone *zone, Handle type, float f, Heap::Tenure tenure) dvander@168: { dvander@168: Local box(zone, Box::cast(zone->allocate(MapKind_Box, sizeof(Box), tenure))); dvander@168: if (!box) dvander@168: return NULL; dvander@168: dvander@168: assert(type->pod() == PrimitiveType_Float); dvander@168: box->u.f = f; dvander@168: box->type_ = type; dvander@168: return box; dvander@168: } dvander@168: dvander@168: Box * dvander@169: Box::NewObj(Zone *zone, Handle type, Handle obj, Heap::Tenure tenure) dvander@168: { dvander@168: Local box(zone, Box::cast(zone->allocate(MapKind_Box, sizeof(Box), tenure))); dvander@168: if (!box) dvander@168: return NULL; dvander@168: dvander@168: assert(type->isTraceable()); dvander@168: box->u.obj = obj; dvander@168: box->type_ = type; dvander@168: return box; dvander@168: } dvander@168: