1.1 --- a/jitcraft/Spaces.cpp Fri Jul 06 18:57:27 2012 -0400
1.2 +++ b/jitcraft/Spaces.cpp Fri Jul 06 19:24:22 2012 -0400
1.3 @@ -23,29 +23,22 @@
1.4 using namespace jc;
1.5
1.6 HeapStack::HeapStack()
1.7 - : buffer_(NULL),
1.8 - pos_(NULL),
1.9 - end_(NULL)
1.10 + : chunk_(NULL),
1.11 + cursor_(NULL)
1.12 {
1.13 }
1.14
1.15 HeapStack::~HeapStack()
1.16 {
1.17 - if (buffer_)
1.18 - OS::UnmapAlignedMemory(map_.base(), map_.size());
1.19 + if (chunk_)
1.20 + HeapChunk::Destroy(chunk_);
1.21 }
1.22
1.23 bool
1.24 HeapStack::initialize()
1.25 {
1.26 - map_ = OS::MapAlignedMemory(kStackSize, kStackSize, OS::Map_Commit);
1.27 - if (!map_.base())
1.28 - return false;
1.29 -
1.30 - buffer_ = map_.aligned();
1.31 - pos_ = buffer_;
1.32 - end_ = buffer_ + kStackSize;
1.33 - mask_ = kStackSize - 1;
1.34 + chunk_ = HeapChunk::New(NULL, kStackSize);
1.35 + cursor_ = chunk_->first();
1.36 return true;
1.37 }
1.38
1.39 @@ -61,7 +54,6 @@
1.40 HeapChunk *chunk = reinterpret_cast<HeapChunk *>(map.aligned());
1.41 chunk->base_ = map.base();
1.42 chunk->end_ = map.base() + map.size();
1.43 - chunk->cursor_ = chunk->first();
1.44 if (prev)
1.45 prev->next_ = chunk;
1.46
1.47 @@ -85,6 +77,7 @@
1.48 {
1.49 first_ = HeapChunk::New(first_, HeapChunk::kDefaultSize);
1.50 last_ = first_;
1.51 + cursor_ = first_->first();
1.52
1.53 return !!first_;
1.54 }
1.55 @@ -96,7 +89,14 @@
1.56 if (!chunk)
1.57 return NULL;
1.58
1.59 - return chunk->allocate(nbytes);
1.60 + last_ = chunk;
1.61 + cursor_ = chunk->first();
1.62 +
1.63 + assert(cursor_ + nbytes <= chunk->end());
1.64 +
1.65 + Address address = cursor_;
1.66 + cursor_ += nbytes;
1.67 + return address;
1.68 }
1.69
1.70 OldSpace::~OldSpace()
1.71 @@ -143,9 +143,6 @@
1.72 first_ = chunk;
1.73 last_ = chunk;
1.74
1.75 - Address address = chunk->allocate(nbytes);
1.76 - assert(address);
1.77 -
1.78 - return address;
1.79 + return chunk->first();
1.80 }
1.81