diff -r 13bd3a8df334 -r 8e22792a3921 jitcraft/Zone.cpp --- a/jitcraft/Zone.cpp Sat Jul 07 17:11:31 2012 -0700 +++ b/jitcraft/Zone.cpp Sat Jul 07 20:28:29 2012 -0700 @@ -17,7 +17,9 @@ * JITCraft. If not, see http://www.gnu.org/licenses/. */ #include "Zone.h" +#include "StringPool.h" #include "TypeManager.h" +#include "AllocatorPolicies.h" using namespace jc; @@ -30,6 +32,12 @@ { } +Zone::~Zone() +{ + delete symbols_; + delete types_; +} + bool Zone::initialize() { @@ -38,6 +46,10 @@ if (!heap_.initialize()) return false; + symbols_ = new StringPool(this); + if (!symbols_ || !symbols_->initialize()) + return false; + maps_[MapKind_Meta] = heap_.metaMap(); if ((maps_[MapKind_Type] = allocateMap(MapKind_Type, sizeof(Map))) == NULL) return false; @@ -55,6 +67,8 @@ return false; if ((maps_[MapKind_Function] = allocateMap(MapKind_Function, sizeof(Map))) == NULL) return false; + if ((maps_[MapKind_String] = allocateMap(MapKind_String, sizeof(Map))) == NULL) + return false; if ((maps_[MapKind_FreeRegion] = allocateMap(MapKind_FreeRegion, sizeof(Map))) == NULL) return false; @@ -94,3 +108,28 @@ stack_.accept(visitor); } +String * +Zone::makeSymbol(const char *str, size_t length) +{ + return symbols_->add(str, length); +} + +String * +Zone::makeSymbol(const char *str) +{ + return makeSymbol(str, strlen(str)); +} + +void +ZoneAllocatorPolicy::reportOutOfMemory() +{ + // :TODO: report + assert(false); +} + +void +ZoneAllocatorPolicy::reportAllocationOverflow() +{ + // :TODO: report + assert(false); +}