Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: src/api.h

Issue 10778036: The deferred handes list belongs to the Isolate and not to the (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/api.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/api.h
diff --git a/src/api.h b/src/api.h
index 6be447424687a51812c4126edd333ddb6b9cfb88..ea70dca8a5fbe27a2af63d93206ab88fcd72d238 100644
--- a/src/api.h
+++ b/src/api.h
@@ -397,13 +397,12 @@ class DeferredHandles {
~DeferredHandles();
private:
- DeferredHandles(DeferredHandles* next, Object** first_block_limit,
- HandleScopeImplementer* impl)
- : next_(next),
+ DeferredHandles(Object** first_block_limit, Isolate* isolate)
+ : next_(NULL),
previous_(NULL),
first_block_limit_(first_block_limit),
- impl_(impl) {
- if (next != NULL) next->previous_ = this;
+ isolate_(isolate) {
+ isolate->LinkDeferredHandles(this);
}
void Iterate(ObjectVisitor* v);
@@ -412,9 +411,10 @@ class DeferredHandles {
DeferredHandles* next_;
DeferredHandles* previous_;
Object** first_block_limit_;
- HandleScopeImplementer* impl_;
+ Isolate* isolate_;
friend class HandleScopeImplementer;
+ friend class Isolate;
};
@@ -436,8 +436,7 @@ class HandleScopeImplementer {
saved_contexts_(0),
spare_(NULL),
call_depth_(0),
- last_handle_before_deferred_block_(NULL),
- deferred_handles_head_(NULL) { }
+ last_handle_before_deferred_block_(NULL) { }
~HandleScopeImplementer() {
DeleteArray(spare_);
@@ -475,13 +474,18 @@ class HandleScopeImplementer {
inline List<internal::Object**>* blocks() { return &blocks_; }
Isolate* isolate() const { return isolate_; }
+ void ReturnBlock(Object** block) {
+ ASSERT(block != NULL);
+ if (spare_ != NULL) DeleteArray(spare_);
+ spare_ = block;
+ }
+
private:
void ResetAfterArchive() {
blocks_.Initialize(0);
entered_contexts_.Initialize(0);
saved_contexts_.Initialize(0);
spare_ = NULL;
- deferred_handles_head_ = NULL;
last_handle_before_deferred_block_ = NULL;
call_depth_ = 0;
}
@@ -490,7 +494,6 @@ class HandleScopeImplementer {
ASSERT(blocks_.length() == 0);
ASSERT(entered_contexts_.length() == 0);
ASSERT(saved_contexts_.length() == 0);
- ASSERT(deferred_handles_head_ == NULL);
blocks_.Free();
entered_contexts_.Free();
saved_contexts_.Free();
@@ -503,7 +506,6 @@ class HandleScopeImplementer {
void BeginDeferredScope();
DeferredHandles* Detach(Object** prev_limit);
- void DestroyDeferredHandles(DeferredHandles* handles);
Isolate* isolate_;
List<internal::Object**> blocks_;
@@ -514,7 +516,6 @@ class HandleScopeImplementer {
Object** spare_;
int call_depth_;
Object** last_handle_before_deferred_block_;
- DeferredHandles* deferred_handles_head_;
// This is only used for threading support.
v8::ImplementationUtilities::HandleScopeData handle_scope_data_;
« no previous file with comments | « no previous file | src/api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698