| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 376b29616b8b59fa02d391e153c680ed618ed062..4b1a3a1618228faa480cb0cd686042e359e85472 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -6457,6 +6457,12 @@ DeferredHandles* HandleScopeImplementer::Detach(Object** prev_limit) {
|
| blocks_.RemoveLast();
|
| }
|
|
|
| + // deferred->blocks_ now contains the blocks installed on the
|
| + // HandleScope stack since BeginDeferredScope was called, but in
|
| + // reverse order.
|
| +
|
| + ASSERT(prev_limit == NULL || !blocks_.is_empty());
|
| +
|
| ASSERT(!blocks_.is_empty() && prev_limit != NULL);
|
| deferred_handles_head_ = deferred;
|
| ASSERT(last_handle_before_deferred_block_ != NULL);
|
| @@ -6466,6 +6472,13 @@ DeferredHandles* HandleScopeImplementer::Detach(Object** prev_limit) {
|
|
|
|
|
| void HandleScopeImplementer::DestroyDeferredHandles(DeferredHandles* deferred) {
|
| +#ifdef DEBUG
|
| + DeferredHandles* deferred_iterator = deferred;
|
| + while (deferred_iterator->previous_ != NULL) {
|
| + deferred_iterator = deferred_iterator->previous_;
|
| + }
|
| + ASSERT(deferred_handles_head_ == deferred_iterator);
|
| +#endif
|
| if (deferred_handles_head_ == deferred) {
|
| deferred_handles_head_ = deferred_handles_head_->next_;
|
| }
|
| @@ -6500,14 +6513,14 @@ DeferredHandles::~DeferredHandles() {
|
| void DeferredHandles::Iterate(ObjectVisitor* v) {
|
| ASSERT(!blocks_.is_empty());
|
|
|
| - for (int i = 0; i < (blocks_.length() - 1); i++) {
|
| - v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]);
|
| - }
|
| + ASSERT((first_block_limit_ >= blocks_.first()) &&
|
| + (first_block_limit_ < &(blocks_.first())[kHandleBlockSize]));
|
|
|
| - ASSERT((last_block_limit_ >= blocks_.last()) &&
|
| - (last_block_limit_ < &(blocks_.last())[kHandleBlockSize]));
|
| + v->VisitPointers(blocks_.first(), first_block_limit_);
|
|
|
| - v->VisitPointers(blocks_.last(), last_block_limit_);
|
| + for (int i = 1; i < blocks_.length(); i++) {
|
| + v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]);
|
| + }
|
| }
|
|
|
|
|
|
|