dvander@0: /* dvander@0: * Copyright (C) 2012 David Anderson dvander@0: * dvander@0: * This file is part of JITCraft. dvander@0: * dvander@0: * JITCraft is free software: you can redistribute it and/or modify it under dvander@0: * the terms of the GNU General Public License as published by the Free dvander@0: * Software Foundation, either version 3 of the License, or (at your option) dvander@0: * any later version. dvander@0: * dvander@0: * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY dvander@0: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@0: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@0: * dvander@0: * You should have received a copy of the GNU General Public License along with dvander@0: * JITCraft. If not, see http://www.gnu.org/licenses/. dvander@0: */ dvander@0: #include "Zone.h" dvander@11: #include "TypeManager.h" dvander@0: dvander@0: using namespace jc; dvander@0: dvander@0: Zone jc::SingleThreadedZone; dvander@0: dvander@11: Zone::Zone() dvander@11: : heap_(this), dvander@11: types_(NULL) dvander@11: { dvander@11: } dvander@11: dvander@0: bool dvander@0: Zone::initialize() dvander@0: { dvander@0: if (!stack_.initialize()) dvander@0: return false; dvander@11: if (!heap_.initialize()) dvander@11: return false; dvander@11: dvander@11: maps_[MapKind_Meta] = heap_.metaMap(); dvander@12: if ((maps_[MapKind_Type] = allocateMap(MapKind_Type, sizeof(Map))) == NULL) dvander@12: return false; dvander@12: if ((maps_[MapKind_FixedArray] = allocateMap(MapKind_FixedArray, sizeof(Map))) == NULL) dvander@12: return false; dvander@12: if ((maps_[MapKind_ByteArray] = allocateMap(MapKind_ByteArray, sizeof(Map))) == NULL) dvander@12: return false; dvander@12: if ((maps_[MapKind_Code] = allocateMap(MapKind_Code, sizeof(Map))) == NULL) dvander@12: return false; dvander@12: if ((maps_[MapKind_MetaArray] = allocateMap(MapKind_MetaArray, sizeof(Map))) == NULL) dvander@11: return false; dvander@11: dvander@11: types_ = new TypeManager(this); dvander@11: if (!types_ || !types_->initialize()) dvander@11: return false; dvander@11: dvander@0: return true; dvander@0: } dvander@12: dvander@12: Map * dvander@12: Zone::allocateMap(MapKind kind, size_t bytes, MapKind parent) dvander@12: { dvander@12: assert(maps_[parent]); dvander@12: Map *map = heap_.allocateMap(kind, bytes); dvander@12: if (!map) dvander@12: return NULL; dvander@12: map->init(maps_[parent]); dvander@12: return map; dvander@12: }