Index: src/compiler.h |
diff --git a/src/compiler.h b/src/compiler.h |
index 44df9e090f1e17b4ac7ef59eb1356c8b2e0cde32..26c0ac43c1b33d5ea25c942544cd3cbb882a0b86 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 CompilationInfoWithZone: public CompilationInfo { |
+ public: |
+ explicit CompilationInfoWithZone(Handle<Script> script) |
+ : CompilationInfo(script, &zone_), |
+ zone_(script->GetIsolate()), |
+ zone_scope_(&zone_, DELETE_ON_EXIT) {} |
+ explicit CompilationInfoWithZone(Handle<SharedFunctionInfo> shared_info) |
+ : CompilationInfo(shared_info, &zone_), |
+ zone_(shared_info->GetIsolate()), |
+ zone_scope_(&zone_, DELETE_ON_EXIT) {} |
+ explicit CompilationInfoWithZone(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 |