Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 6439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6450 Object** block_limit = &block_start[kHandleBlockSize]; | 6450 Object** block_limit = &block_start[kHandleBlockSize]; |
| 6451 // We should not need to check for NoHandleAllocation here. Assert | 6451 // We should not need to check for NoHandleAllocation here. Assert |
| 6452 // this. | 6452 // this. |
| 6453 ASSERT(prev_limit == block_limit || | 6453 ASSERT(prev_limit == block_limit || |
| 6454 !(block_start <= prev_limit && prev_limit <= block_limit)); | 6454 !(block_start <= prev_limit && prev_limit <= block_limit)); |
| 6455 if (prev_limit == block_limit) break; | 6455 if (prev_limit == block_limit) break; |
| 6456 deferred->blocks_.Add(blocks_.last()); | 6456 deferred->blocks_.Add(blocks_.last()); |
| 6457 blocks_.RemoveLast(); | 6457 blocks_.RemoveLast(); |
| 6458 } | 6458 } |
| 6459 | 6459 |
| 6460 ASSERT(prev_limit == NULL || !blocks_.is_empty()); | |
| 6461 | |
| 6460 ASSERT(!blocks_.is_empty() && prev_limit != NULL); | 6462 ASSERT(!blocks_.is_empty() && prev_limit != NULL); |
| 6461 deferred_handles_head_ = deferred; | 6463 deferred_handles_head_ = deferred; |
| 6462 ASSERT(last_handle_before_deferred_block_ != NULL); | 6464 ASSERT(last_handle_before_deferred_block_ != NULL); |
| 6463 last_handle_before_deferred_block_ = NULL; | 6465 last_handle_before_deferred_block_ = NULL; |
| 6464 return deferred; | 6466 return deferred; |
| 6465 } | 6467 } |
| 6466 | 6468 |
| 6467 | 6469 |
| 6468 void HandleScopeImplementer::DestroyDeferredHandles(DeferredHandles* deferred) { | 6470 void HandleScopeImplementer::DestroyDeferredHandles(DeferredHandles* deferred) { |
| 6471 #ifdef DEBUG | |
| 6472 DeferredHandles* deferred_iterator = deferred; | |
| 6473 while (deferred_iterator->previous_ != NULL) | |
| 6474 deferred_iterator = deferred_iterator->previous_; | |
|
Jakob Kummerow
2012/07/06 13:30:32
nit: {} please
sanjoy
2012/07/06 13:56:57
Done.
| |
| 6475 ASSERT(deferred_handles_head_ == deferred_iterator); | |
| 6476 #endif | |
| 6469 if (deferred_handles_head_ == deferred) { | 6477 if (deferred_handles_head_ == deferred) { |
| 6470 deferred_handles_head_ = deferred_handles_head_->next_; | 6478 deferred_handles_head_ = deferred_handles_head_->next_; |
| 6471 } | 6479 } |
| 6472 if (deferred->next_ != NULL) { | 6480 if (deferred->next_ != NULL) { |
| 6473 deferred->next_->previous_ = deferred->previous_; | 6481 deferred->next_->previous_ = deferred->previous_; |
| 6474 } | 6482 } |
| 6475 if (deferred->previous_ != NULL) { | 6483 if (deferred->previous_ != NULL) { |
| 6476 deferred->previous_->next_ = deferred->next_; | 6484 deferred->previous_->next_ = deferred->next_; |
| 6477 } | 6485 } |
| 6478 for (int i = 0; i < deferred->blocks_.length(); i++) { | 6486 for (int i = 0; i < deferred->blocks_.length(); i++) { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 6493 | 6501 |
| 6494 | 6502 |
| 6495 DeferredHandles::~DeferredHandles() { | 6503 DeferredHandles::~DeferredHandles() { |
| 6496 impl_->DestroyDeferredHandles(this); | 6504 impl_->DestroyDeferredHandles(this); |
| 6497 } | 6505 } |
| 6498 | 6506 |
| 6499 | 6507 |
| 6500 void DeferredHandles::Iterate(ObjectVisitor* v) { | 6508 void DeferredHandles::Iterate(ObjectVisitor* v) { |
| 6501 ASSERT(!blocks_.is_empty()); | 6509 ASSERT(!blocks_.is_empty()); |
| 6502 | 6510 |
| 6503 for (int i = 0; i < (blocks_.length() - 1); i++) { | 6511 ASSERT((last_block_limit_ >= blocks_.first()) && |
|
Jakob Kummerow
2012/07/06 13:30:32
last_block_limit_ should probably be renamed to fi
sanjoy
2012/07/06 13:56:57
Done.
| |
| 6512 (last_block_limit_ < &(blocks_.first())[kHandleBlockSize])); | |
| 6513 | |
| 6514 v->VisitPointers(blocks_.first(), last_block_limit_); | |
| 6515 | |
| 6516 for (int i = 1; i < (blocks_.length() - 1); i++) { | |
|
Jakob Kummerow
2012/07/06 13:30:32
This skips over the last block.
sanjoy
2012/07/06 13:56:57
Done.
| |
| 6504 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]); | 6517 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]); |
| 6505 } | 6518 } |
| 6506 | |
| 6507 ASSERT((last_block_limit_ >= blocks_.last()) && | |
| 6508 (last_block_limit_ < &(blocks_.last())[kHandleBlockSize])); | |
| 6509 | |
| 6510 v->VisitPointers(blocks_.last(), last_block_limit_); | |
| 6511 } | 6519 } |
| 6512 | 6520 |
| 6513 | 6521 |
| 6514 } } // namespace v8::internal | 6522 } } // namespace v8::internal |
| OLD | NEW |