Index: runtime/vm/precompiler.cc |
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc |
index 70e00a2e209d7cd745712f912c3635b80213835d..de1f3536e391dbdd84ff30d999390597e95790ae 100644 |
--- a/runtime/vm/precompiler.cc |
+++ b/runtime/vm/precompiler.cc |
@@ -152,11 +152,9 @@ class DartPrecompilationPipeline : public DartCompilationPipeline { |
class PrecompileParsedFunctionHelper : public ValueObject { |
public: |
- PrecompileParsedFunctionHelper(Precompiler* precompiler, |
- ParsedFunction* parsed_function, |
+ PrecompileParsedFunctionHelper(ParsedFunction* parsed_function, |
bool optimized) |
- : precompiler_(precompiler), |
- parsed_function_(parsed_function), |
+ : parsed_function_(parsed_function), |
optimized_(optimized), |
thread_(Thread::Current()) { |
} |
@@ -173,7 +171,6 @@ class PrecompileParsedFunctionHelper : public ValueObject { |
FlowGraphCompiler* graph_compiler, |
FlowGraph* flow_graph); |
- Precompiler* precompiler_; |
ParsedFunction* parsed_function_; |
const bool optimized_; |
Thread* const thread_; |
@@ -317,8 +314,7 @@ Precompiler::Precompiler(Thread* thread, bool reset_fields) : |
types_to_retain_(), |
consts_to_retain_(), |
field_type_map_(), |
- error_(Error::Handle()), |
- get_runtime_type_is_unique_(false) { |
+ error_(Error::Handle()) { |
} |
@@ -487,8 +483,9 @@ void Precompiler::PrecompileStaticInitializers() { |
void Precompiler::PrecompileConstructors() { |
class ConstructorVisitor : public FunctionVisitor { |
public: |
- explicit ConstructorVisitor(Precompiler* precompiler, Zone* zone) |
- : precompiler_(precompiler), zone_(zone) { |
+ explicit ConstructorVisitor(Zone* zone, FieldTypeMap* map) |
+ : zone_(zone), field_type_map_(map) { |
+ ASSERT(map != NULL); |
} |
void Visit(const Function& function) { |
if (!function.IsGenerativeConstructor()) return; |
@@ -500,19 +497,18 @@ void Precompiler::PrecompileConstructors() { |
if (FLAG_trace_precompiler) { |
THR_Print("Precompiling constructor %s\n", function.ToCString()); |
} |
- CompileFunction(precompiler_, |
- Thread::Current(), |
+ CompileFunction(Thread::Current(), |
zone_, |
- function); |
+ function, |
+ field_type_map_); |
} |
- |
private: |
- Precompiler* precompiler_; |
Zone* zone_; |
+ FieldTypeMap* field_type_map_; |
}; |
HANDLESCOPE(T); |
- ConstructorVisitor visitor(this, zone_); |
+ ConstructorVisitor visitor(zone_, &field_type_map_); |
VisitFunctions(&visitor); |
FieldTypeMap::Iterator it(field_type_map_.GetIterator()); |
@@ -800,7 +796,7 @@ void Precompiler::ProcessFunction(const Function& function) { |
ASSERT(!function.is_abstract()); |
ASSERT(!function.IsRedirectingFactory()); |
- error_ = CompileFunction(this, thread_, zone_, function); |
+ error_ = CompileFunction(thread_, zone_, function); |
if (!error_.IsNull()) { |
Jump(error_); |
} |
@@ -1138,8 +1134,7 @@ RawFunction* Precompiler::CompileStaticInitializer(const Field& field, |
parsed_function->AllocateVariables(); |
DartPrecompilationPipeline pipeline(zone.GetZone()); |
- PrecompileParsedFunctionHelper helper(/* precompiler = */ NULL, |
- parsed_function, |
+ PrecompileParsedFunctionHelper helper(parsed_function, |
/* optimized = */ true); |
bool success = helper.Compile(&pipeline); |
ASSERT(success); |
@@ -1240,8 +1235,7 @@ RawObject* Precompiler::ExecuteOnce(SequenceNode* fragment) { |
// Non-optimized code generator. |
DartPrecompilationPipeline pipeline(Thread::Current()->zone()); |
- PrecompileParsedFunctionHelper helper(/* precompiler = */ NULL, |
- parsed_function, |
+ PrecompileParsedFunctionHelper helper(parsed_function, |
/* optimized = */ false); |
helper.Compile(&pipeline); |
Code::Handle(func.unoptimized_code()).set_var_descriptors( |
@@ -1517,10 +1511,6 @@ void Precompiler::CollectDynamicFunctionNames() { |
} |
} |
- farray ^= table.GetOrNull(Symbols::GetRuntimeType()); |
- |
- get_runtime_type_is_unique_ = !farray.IsNull() && (farray.Length() == 1); |
- |
if (FLAG_print_unique_targets) { |
UniqueFunctionsSet::Iterator unique_iter(&functions_set); |
while (unique_iter.MoveNext()) { |
@@ -2829,8 +2819,7 @@ bool PrecompileParsedFunctionHelper::Compile(CompilationPipeline* pipeline) { |
caller_inline_id.Add(-1); |
CSTAT_TIMER_SCOPE(thread(), graphoptimizer_timer); |
- AotOptimizer optimizer(precompiler_, |
- flow_graph, |
+ AotOptimizer optimizer(flow_graph, |
use_speculative_inlining, |
&inlining_black_list); |
optimizer.PopulateWithICData(); |
@@ -2872,8 +2861,7 @@ bool PrecompileParsedFunctionHelper::Compile(CompilationPipeline* pipeline) { |
&inline_id_to_token_pos, |
&caller_inline_id, |
use_speculative_inlining, |
- &inlining_black_list, |
- precompiler_); |
+ &inlining_black_list); |
inliner.Inline(); |
// Use lists are maintained and validated by the inliner. |
DEBUG_ASSERT(flow_graph->VerifyUseLists()); |
@@ -3252,8 +3240,7 @@ bool PrecompileParsedFunctionHelper::Compile(CompilationPipeline* pipeline) { |
} |
-static RawError* PrecompileFunctionHelper(Precompiler* precompiler, |
- CompilationPipeline* pipeline, |
+static RawError* PrecompileFunctionHelper(CompilationPipeline* pipeline, |
const Function& function, |
bool optimized) { |
// Check that we optimize, except if the function is not optimizable. |
@@ -3295,8 +3282,7 @@ static RawError* PrecompileFunctionHelper(Precompiler* precompiler, |
num_tokens_after - num_tokens_before); |
} |
- PrecompileParsedFunctionHelper helper( |
- precompiler, parsed_function, optimized); |
+ PrecompileParsedFunctionHelper helper(parsed_function, optimized); |
const bool success = helper.Compile(pipeline); |
if (!success) { |
// Encountered error. |
@@ -3344,18 +3330,17 @@ static RawError* PrecompileFunctionHelper(Precompiler* precompiler, |
} |
-RawError* Precompiler::CompileFunction(Precompiler* precompiler, |
- Thread* thread, |
+RawError* Precompiler::CompileFunction(Thread* thread, |
Zone* zone, |
- const Function& function) { |
+ const Function& function, |
+ FieldTypeMap* field_type_map) { |
VMTagScope tagScope(thread, VMTag::kCompileUnoptimizedTagId); |
TIMELINE_FUNCTION_COMPILATION_DURATION(thread, "CompileFunction", function); |
ASSERT(FLAG_precompiled_mode); |
const bool optimized = function.IsOptimizable(); // False for natives. |
- DartPrecompilationPipeline pipeline(zone, |
- (precompiler != NULL) ? precompiler->field_type_map() : NULL); |
- return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized); |
+ DartPrecompilationPipeline pipeline(zone, field_type_map); |
+ return PrecompileFunctionHelper(&pipeline, function, optimized); |
} |
#endif // DART_PRECOMPILER |