| Index: src/handles.cc
|
| ===================================================================
|
| --- src/handles.cc (revision 1538)
|
| +++ src/handles.cc (working copy)
|
| @@ -52,44 +52,39 @@
|
| }
|
|
|
|
|
| -void** HandleScope::CreateHandle(void* value) {
|
| +void** HandleScope::Extend() {
|
| void** result = current_.next;
|
| - if (result == current_.limit) {
|
| - // Make sure there's at least one scope on the stack and that the
|
| - // top of the scope stack isn't a barrier.
|
| - if (current_.extensions < 0) {
|
| - Utils::ReportApiFailure("v8::HandleScope::CreateHandle()",
|
| - "Cannot create a handle without a HandleScope");
|
| - return NULL;
|
| - }
|
| - HandleScopeImplementer* impl = HandleScopeImplementer::instance();
|
| - // If there's more room in the last block, we use that. This is used
|
| - // for fast creation of scopes after scope barriers.
|
| - if (!impl->Blocks()->is_empty()) {
|
| - void** limit = &impl->Blocks()->last()[kHandleBlockSize];
|
| - if (current_.limit != limit) {
|
| - current_.limit = limit;
|
| - }
|
| - }
|
|
|
| - // If we still haven't found a slot for the handle, we extend the
|
| - // current handle scope by allocating a new handle block.
|
| - if (result == current_.limit) {
|
| - // If there's a spare block, use it for growing the current scope.
|
| - result = impl->GetSpareOrNewBlock();
|
| - // Add the extension to the global list of blocks, but count the
|
| - // extension as part of the current scope.
|
| - impl->Blocks()->Add(result);
|
| - current_.extensions++;
|
| - current_.limit = &result[kHandleBlockSize];
|
| + ASSERT(result == current_.limit);
|
| + // Make sure there's at least one scope on the stack and that the
|
| + // top of the scope stack isn't a barrier.
|
| + if (current_.extensions < 0) {
|
| + Utils::ReportApiFailure("v8::HandleScope::CreateHandle()",
|
| + "Cannot create a handle without a HandleScope");
|
| + return NULL;
|
| + }
|
| + HandleScopeImplementer* impl = HandleScopeImplementer::instance();
|
| + // If there's more room in the last block, we use that. This is used
|
| + // for fast creation of scopes after scope barriers.
|
| + if (!impl->Blocks()->is_empty()) {
|
| + void** limit = &impl->Blocks()->last()[kHandleBlockSize];
|
| + if (current_.limit != limit) {
|
| + current_.limit = limit;
|
| }
|
| }
|
| +
|
| + // If we still haven't found a slot for the handle, we extend the
|
| + // current handle scope by allocating a new handle block.
|
| + if (result == current_.limit) {
|
| + // If there's a spare block, use it for growing the current scope.
|
| + result = impl->GetSpareOrNewBlock();
|
| + // Add the extension to the global list of blocks, but count the
|
| + // extension as part of the current scope.
|
| + impl->Blocks()->Add(result);
|
| + current_.extensions++;
|
| + current_.limit = &result[kHandleBlockSize];
|
| + }
|
|
|
| - // Update the current next field, set the value in the created
|
| - // handle, and return the result.
|
| - ASSERT(result < current_.limit);
|
| - current_.next = result + 1;
|
| - *result = value;
|
| return result;
|
| }
|
|
|
|
|