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

Unified Diff: src/compiler.cc

Issue 1000353004: Remove CompilationInfoWithZone from public API. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Further simplification. Created 5 years, 9 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 | « src/compiler.h ('k') | src/compiler/js-inlining.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index 4f0ddd997694faef7b3cf689a1c577f3daa88bed..29df079d35fc9ad64cdc54dcfcda88b4f9762ade 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -74,6 +74,28 @@ PARSE_INFO_GETTER(Handle<SharedFunctionInfo>, shared_info)
#undef PARSE_INFO_GETTER_WITH_DEFAULT
+// Exactly like a CompilationInfo, except being allocated via {new} and it also
+// creates and enters a Zone on construction and deallocates it on destruction.
+class CompilationInfoWithZone : public CompilationInfo {
+ public:
+ explicit CompilationInfoWithZone(Handle<JSFunction> function)
+ : CompilationInfo(new ParseInfo(&zone_, function)) {}
+
+ // Virtual destructor because a CompilationInfoWithZone has to exit the
+ // zone scope and get rid of dependent maps even when the destructor is
+ // called when cast as a CompilationInfo.
+ virtual ~CompilationInfoWithZone() {
+ DisableFutureOptimization();
+ RollbackDependencies();
+ delete parse_info_;
+ parse_info_ = nullptr;
+ }
+
+ private:
+ Zone zone_;
+};
+
+
bool CompilationInfo::has_shared_info() const {
return parse_info_ && !parse_info_->shared_info().is_null();
}
@@ -1007,7 +1029,9 @@ MaybeHandle<Code> Compiler::GetDebugCode(Handle<JSFunction> function) {
void Compiler::CompileForLiveEdit(Handle<Script> script) {
// TODO(635): support extensions.
- CompilationInfoWithZone info(script);
+ Zone zone;
+ ParseInfo parse_info(&zone, script);
+ CompilationInfo info(&parse_info);
PostponeInterruptsScope postpone(info.isolate());
VMState<COMPILER> state(info.isolate());
@@ -1145,13 +1169,14 @@ MaybeHandle<JSFunction> Compiler::GetFunctionFromEval(
if (!maybe_shared_info.ToHandle(&shared_info)) {
Handle<Script> script = isolate->factory()->NewScript(source);
- CompilationInfoWithZone info(script);
- ParseInfo* parse_info = info.parse_info();
- parse_info->set_eval();
- if (context->IsNativeContext()) parse_info->set_global();
- parse_info->set_language_mode(language_mode);
- parse_info->set_parse_restriction(restriction);
- parse_info->set_context(context);
+ Zone zone;
+ ParseInfo parse_info(&zone, script);
+ CompilationInfo info(&parse_info);
+ parse_info.set_eval();
+ if (context->IsNativeContext()) parse_info.set_global();
+ parse_info.set_language_mode(language_mode);
+ parse_info.set_parse_restriction(restriction);
+ parse_info.set_context(context);
Debug::RecordEvalCaller(script);
@@ -1268,25 +1293,26 @@ Handle<SharedFunctionInfo> Compiler::CompileScript(
}
// Compile the function and add it to the cache.
- CompilationInfoWithZone info(script);
- ParseInfo* parse_info = info.parse_info();
+ Zone zone;
+ ParseInfo parse_info(&zone, script);
+ CompilationInfo info(&parse_info);
if (FLAG_harmony_modules && is_module) {
- parse_info->set_module();
+ parse_info.set_module();
} else {
- parse_info->set_global();
+ parse_info.set_global();
}
if (compile_options != ScriptCompiler::kNoCompileOptions) {
- parse_info->set_cached_data(cached_data);
+ parse_info.set_cached_data(cached_data);
}
- parse_info->set_compile_options(compile_options);
- parse_info->set_extension(extension);
- parse_info->set_context(context);
+ parse_info.set_compile_options(compile_options);
+ parse_info.set_extension(extension);
+ parse_info.set_context(context);
if (FLAG_serialize_toplevel &&
compile_options == ScriptCompiler::kProduceCodeCache) {
info.PrepareForSerializing();
}
- parse_info->set_language_mode(
+ parse_info.set_language_mode(
static_cast<LanguageMode>(info.language_mode() | language_mode));
result = CompileToplevel(&info);
if (extension == NULL && !result.is_null() && !result->dont_cache()) {
@@ -1334,11 +1360,12 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(
FunctionLiteral* literal, Handle<Script> script,
CompilationInfo* outer_info) {
// Precondition: code has been parsed and scopes have been analyzed.
- CompilationInfoWithZone info(script);
- ParseInfo* parse_info = info.parse_info();
- parse_info->set_literal(literal);
- parse_info->set_scope(literal->scope());
- parse_info->set_language_mode(literal->scope()->language_mode());
+ Zone zone;
+ ParseInfo parse_info(&zone, script);
+ CompilationInfo info(&parse_info);
+ parse_info.set_literal(literal);
+ parse_info.set_scope(literal->scope());
+ parse_info.set_language_mode(literal->scope()->language_mode());
if (outer_info->will_serialize()) info.PrepareForSerializing();
Isolate* isolate = info.isolate();
@@ -1548,21 +1575,6 @@ bool CompilationPhase::ShouldProduceTraceOutput() const {
}
-CompilationInfoWithZone::CompilationInfoWithZone(Handle<Script> script)
- : CompilationInfo(new ParseInfo(&zone_, script)) {}
-
-
-CompilationInfoWithZone::CompilationInfoWithZone(Handle<JSFunction> function)
- : CompilationInfo(new ParseInfo(&zone_, function)) {}
-
-
-CompilationInfoWithZone::~CompilationInfoWithZone() {
- DisableFutureOptimization();
- RollbackDependencies();
- delete parse_info_;
- parse_info_ = nullptr;
-}
-
#if DEBUG
void CompilationInfo::PrintAstForTesting() {
PrintF("--- Source from AST ---\n%s\n",
« no previous file with comments | « src/compiler.h ('k') | src/compiler/js-inlining.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698