Index: src/compiler.h |
diff --git a/src/compiler.h b/src/compiler.h |
index 44df9e090f1e17b4ac7ef59eb1356c8b2e0cde32..32667107397b69e29102daf6fc0b0020df7a33fe 100644 |
--- a/src/compiler.h |
+++ b/src/compiler.h |
@@ -41,14 +41,17 @@ class ScriptDataImpl; |
// is constructed based on the resources available at compile-time. |
class CompilationInfo BASE_EMBEDDED { |
public: |
- explicit CompilationInfo(Handle<Script> script); |
- explicit CompilationInfo(Handle<SharedFunctionInfo> shared_info); |
- explicit CompilationInfo(Handle<JSFunction> closure); |
+ CompilationInfo(Handle<Script> script, Zone* zone); |
+ CompilationInfo(Handle<SharedFunctionInfo> shared_info, Zone* zone); |
+ CompilationInfo(Handle<JSFunction> closure, Zone* zone); |
Isolate* isolate() { |
ASSERT(Isolate::Current() == isolate_); |
return isolate_; |
} |
+ Zone* zone() { |
+ return zone_; |
+ } |
bool is_lazy() const { return IsLazy::decode(flags_); } |
bool is_eval() const { return IsEval::decode(flags_); } |
bool is_global() const { return IsGlobal::decode(flags_); } |
@@ -184,8 +187,6 @@ class CompilationInfo BASE_EMBEDDED { |
NONOPT |
}; |
- CompilationInfo() : function_(NULL) {} |
- |
void Initialize(Mode mode) { |
mode_ = V8::UseCrankshaft() ? mode : NONOPT; |
ASSERT(!script_.is_null()); |
@@ -254,10 +255,37 @@ class CompilationInfo BASE_EMBEDDED { |
Mode mode_; |
int osr_ast_id_; |
+ // The zone from which the compilation pipeline working on this |
+ // CompilationInfo allocates. |
+ Zone* zone_; |
+ |
DISALLOW_COPY_AND_ASSIGN(CompilationInfo); |
}; |
+// Exactly like a CompilationInfo, except also creates and enters a |
+// Zone on construction and deallocates it on exit. |
+class ZoneCompilationInfo: public CompilationInfo { |
danno
2012/06/19 20:09:53
Please call this CompilationInfoWithZone, since bo
sanjoy
2012/06/19 20:56:40
Done.
|
+ public: |
+ explicit ZoneCompilationInfo(Handle<Script> script) |
+ : CompilationInfo(script, &zone_), |
+ zone_(script->GetIsolate()), |
+ zone_scope_(&zone_, DELETE_ON_EXIT) {} |
+ explicit ZoneCompilationInfo(Handle<SharedFunctionInfo> shared_info) |
+ : CompilationInfo(shared_info, &zone_), |
+ zone_(shared_info->GetIsolate()), |
+ zone_scope_(&zone_, DELETE_ON_EXIT) {} |
+ explicit ZoneCompilationInfo(Handle<JSFunction> closure) |
+ : CompilationInfo(closure, &zone_), |
+ zone_(closure->GetIsolate()), |
+ zone_scope_(&zone_, DELETE_ON_EXIT) {} |
+ |
+ private: |
+ Zone zone_; |
+ ZoneScope zone_scope_; |
+}; |
+ |
+ |
// The V8 compiler |
// |
// General strategy: Source code is translated into an anonymous function w/o |