Chromium Code Reviews| Index: src/handles.cc |
| diff --git a/src/handles.cc b/src/handles.cc |
| index def1604ac7438c5769a0cb6287fd009dee54758d..9e4f664dd1f6e4d583fef76c301b1d3c61e503cf 100644 |
| --- a/src/handles.cc |
| +++ b/src/handles.cc |
| @@ -958,4 +958,54 @@ int Utf8Length(Handle<String> str) { |
| return len; |
| } |
| + |
| +DeferredHandleScope::DeferredHandleScope(Isolate* isolate) |
| + : impl_(isolate->handle_scope_implementer()) { |
| + impl_->BeginDeferredScope(); |
| + Object** new_next = impl_->GetSpareOrNewBlock(); |
| + Object** new_limit = &new_next[kHandleBlockSize]; |
| + impl_->blocks()->Add(new_next); |
| + |
| + v8::ImplementationUtilities::HandleScopeData* data = |
| + impl_->isolate()->handle_scope_data(); |
| +#ifdef DEBUG |
| + prev_level_ = data->level; |
| +#endif |
| + data->level++; |
| + prev_limit_ = data->limit; |
| + prev_next_ = data->next; |
| + data->next = new_next; |
| + data->limit = new_limit; |
| +} |
| + |
|
Erik Corry
2012/06/27 10:28:15
Missing newline.
sanjoy
2012/06/27 11:17:09
Fixed.
|
| +DeferredHandleScope::~DeferredHandleScope() { |
| + impl_->isolate()->handle_scope_data()->level--; |
| + ASSERT(handles_detached_); |
| + ASSERT(impl_->isolate()->handle_scope_data()->level == prev_level_); |
| +} |
| + |
| + |
| +DeferredHandles* DeferredHandleScope::Detach() { |
| + DeferredHandles* deferred = impl_->Detach(prev_limit_); |
| + v8::ImplementationUtilities::HandleScopeData* data = |
| + impl_->isolate()->handle_scope_data(); |
| + data->next = prev_next_; |
| + data->limit = prev_limit_; |
| +#ifdef DEBUG |
| + handles_detached_ = true; |
| +#endif |
| + return deferred; |
| +} |
| + |
| + |
| +CompilationHandleScope::CompilationHandleScope(CompilationInfo* info) |
|
Erik Corry
2012/06/27 10:28:15
This should also go somewhere else (perhaps inline
sanjoy
2012/06/27 11:17:09
Moved to compiler.h
|
| + : deferred_(info->isolate()), info_(info) { |
| +} |
| + |
| + |
| +CompilationHandleScope::~CompilationHandleScope() { |
| + info_->set_deferred_handles(deferred_.Detach()); |
| +} |
| + |
| + |
| } } // namespace v8::internal |