Chromium Code Reviews| 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 |