diff -r ce072f38628c -r fb3cd08bc7fb src/Stack.cpp --- a/src/Stack.cpp Sat Dec 22 16:42:20 2012 -0800 +++ b/src/Stack.cpp Sat Dec 22 18:22:14 2012 -0800 @@ -67,7 +67,9 @@ static inline size_t SizeForCodeFrame(Code *code) { - return sizeof(Frame) + sizeof(LocalSlot) * (code->nlocals() + code->maxStackDepth()); + return sizeof(Frame) + + sizeof(void *) * (code->maxLoopDepth()) + + sizeof(LocalSlot) * (code->nlocals() + code->maxStackDepth()); } bool @@ -199,6 +201,22 @@ top_.fp = top_.fp->prev(); } +void +Frame::enterLoop(Zone *zone) +{ + assert(loopDepth_ < code_->maxLoopDepth()); + loopStack()[loopDepth_] = zone->heap().lifoPosition(); + loopDepth_++; +} + +void +Frame::leaveLoop(Zone *zone) +{ + assert(loopDepth_ > 0); + loopDepth_--; + zone->heap().unwindLifo(loopStack()[loopDepth_]); +} + void Frame::accept(VirtualObjectVisitor *visitor) {