| 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
|
|
|