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

Unified Diff: runtime/vm/compiler.cc

Issue 2903993002: Remember deopt-id -> context-level mappings in var descriptors. (Closed)
Patch Set: update descriptor tests Created 3 years, 7 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 | « no previous file | runtime/vm/dart.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/compiler.cc
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index a162f5a4e28b4a5811da2654ad56c91ec2e94ee3..a99d4ba3b5fe7c25fcbe7352bf2a10a47a2e2d5b 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -137,15 +137,16 @@ FlowGraph* DartCompilationPipeline::BuildFlowGraph(
if (UseKernelFrontEndFor(parsed_function)) {
kernel::TreeNode* node = static_cast<kernel::TreeNode*>(
parsed_function->function().kernel_function());
- kernel::FlowGraphBuilder builder(node, parsed_function, ic_data_array, NULL,
- osr_id);
+ kernel::FlowGraphBuilder builder(node, parsed_function, ic_data_array,
+ /* not building var desc */ NULL,
+ /* not inlining */ NULL, osr_id);
FlowGraph* graph = builder.BuildGraph();
ASSERT(graph != NULL);
return graph;
}
FlowGraphBuilder builder(*parsed_function, ic_data_array,
- NULL, // NULL = not inlining.
- osr_id);
+ /* not building var desc */ NULL,
+ /* not inlining */ NULL, osr_id);
return builder.BuildGraph();
}
@@ -176,8 +177,8 @@ FlowGraph* IrregexpCompilationPipeline::BuildFlowGraph(
// Build the flow graph.
FlowGraphBuilder builder(*parsed_function, ic_data_array,
- NULL, // NULL = not inlining.
- osr_id);
+ /* not building var desc */ NULL,
+ /* not inlining */ NULL, osr_id);
return new (zone)
FlowGraph(*parsed_function, result.graph_entry, result.num_blocks);
@@ -1587,22 +1588,42 @@ void Compiler::ComputeLocalVarDescriptors(const Code& code) {
ASSERT(!function.IsIrregexpFunction());
// In background compilation, parser can produce 'errors": bailouts
// if state changed while compiling in background.
+ const intptr_t prev_deopt_id = Thread::Current()->deopt_id();
+ Thread::Current()->set_deopt_id(0);
LongJumpScope jump;
if (setjmp(*jump.Set()) == 0) {
- if (function.kernel_function() == NULL) {
+ ZoneGrowableArray<const ICData*>* ic_data_array =
+ new ZoneGrowableArray<const ICData*>();
+ ZoneGrowableArray<intptr_t>* context_level_array =
+ new ZoneGrowableArray<intptr_t>();
+
+ if (!UseKernelFrontEndFor(parsed_function)) {
Parser::ParseFunction(parsed_function);
parsed_function->AllocateVariables();
+ FlowGraphBuilder builder(
+ *parsed_function, *ic_data_array, context_level_array,
+ /* not inlining */ NULL, Compiler::kNoOSRDeoptId);
+ builder.BuildGraph();
} else {
parsed_function->EnsureKernelScopes();
+ kernel::TreeNode* node = static_cast<kernel::TreeNode*>(
+ parsed_function->function().kernel_function());
+ kernel::FlowGraphBuilder builder(
+ node, parsed_function, *ic_data_array, context_level_array,
+ /* not inlining */ NULL, Compiler::kNoOSRDeoptId);
+ builder.BuildGraph();
}
+
const LocalVarDescriptors& var_descs = LocalVarDescriptors::Handle(
- parsed_function->node_sequence()->scope()->GetVarDescriptors(function));
+ parsed_function->node_sequence()->scope()->GetVarDescriptors(
+ function, context_level_array));
ASSERT(!var_descs.IsNull());
code.set_var_descriptors(var_descs);
} else {
// Only possible with background compilation.
ASSERT(Compiler::IsBackgroundCompilation());
}
+ Thread::Current()->set_deopt_id(prev_deopt_id);
}
« no previous file with comments | « no previous file | runtime/vm/dart.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698