| Index: runtime/vm/compiler.cc
|
| ===================================================================
|
| --- runtime/vm/compiler.cc (revision 4655)
|
| +++ runtime/vm/compiler.cc (working copy)
|
| @@ -161,12 +161,14 @@
|
| if (optimized) {
|
| // Transition to optimized code only from unoptimized code ... for now.
|
| ASSERT(function.HasCode());
|
| - ASSERT(!Code::Handle(function.code()).is_optimized());
|
| - // Do not use type feedback to optimize a function that was deoptimized.
|
| + ASSERT(!function.HasOptimizedCode());
|
| + // Do not use type feedback to optimize a function that was deoptimized
|
| + // too often.
|
| if (parsed_function.function().deoptimization_counter() <
|
| FLAG_deoptimization_counter_threshold) {
|
| - ExtractTypeFeedback(Code::Handle(parsed_function.function().code()),
|
| - parsed_function.node_sequence());
|
| + ExtractTypeFeedback(
|
| + Code::Handle(parsed_function.function().unoptimized_code()),
|
| + parsed_function.node_sequence());
|
| }
|
| OptimizingCodeGenerator code_gen(&assembler, parsed_function);
|
| code_gen.GenerateCode();
|
| @@ -176,7 +178,7 @@
|
| code_gen.FinalizePcDescriptors(code);
|
| code_gen.FinalizeExceptionHandlers(code);
|
| function.SetCode(code);
|
| - code_index_table->AddFunction(function);
|
| + code_index_table->AddCode(code);
|
| CodePatcher::PatchEntry(Code::Handle(function.unoptimized_code()));
|
| if (FLAG_trace_compiler) {
|
| OS::Print("--> patching entry 0x%x\n",
|
| @@ -185,7 +187,7 @@
|
| } else {
|
| // Unoptimized code.
|
| if (Code::Handle(function.unoptimized_code()).IsNull()) {
|
| - ASSERT(Code::Handle(function.code()).IsNull());
|
| + ASSERT(!function.HasCode());
|
| // Compiling first time.
|
| CodeGenerator code_gen(&assembler, parsed_function);
|
| code_gen.GenerateCode();
|
| @@ -198,15 +200,15 @@
|
| function.set_unoptimized_code(code);
|
| function.SetCode(code);
|
| ASSERT(CodePatcher::CodeIsPatchable(code));
|
| - code_index_table->AddFunction(function);
|
| + code_index_table->AddCode(code);
|
| } else {
|
| // Disable optimized code.
|
| - const Code& optimized_code = Code::Handle(function.code());
|
| - ASSERT(optimized_code.is_optimized());
|
| - CodePatcher::PatchEntry(Code::Handle(function.code()));
|
| + ASSERT(function.HasOptimizedCode());
|
| + // Patch entry of optimized code
|
| + CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
|
| if (FLAG_trace_compiler) {
|
| OS::Print("--> patching entry 0x%x\n",
|
| - Code::Handle(function.unoptimized_code()).EntryPoint());
|
| + Code::Handle(function.CurrentCode()).EntryPoint());
|
| }
|
| // Use previously compiled code.
|
| function.SetCode(Code::Handle(function.unoptimized_code()));
|
| @@ -219,12 +221,13 @@
|
| }
|
| if (FLAG_trace_compiler) {
|
| OS::Print("--> '%s' entry: 0x%x\n",
|
| - function_fullname, Code::Handle(function.code()).EntryPoint());
|
| + function_fullname,
|
| + Code::Handle(function.CurrentCode()).EntryPoint());
|
| }
|
| if (FLAG_disassemble) {
|
| OS::Print("Code for %sfunction '%s' {\n",
|
| optimized ? "optimized " : "", function_fullname);
|
| - const Code& code = Code::Handle(function.code());
|
| + const Code& code = Code::Handle(function.CurrentCode());
|
| const Instructions& instructions =
|
| Instructions::Handle(code.instructions());
|
| uword start = instructions.EntryPoint();
|
| @@ -360,7 +363,7 @@
|
| func.SetCode(code);
|
| CodeIndexTable* code_index_table = isolate->code_index_table();
|
| ASSERT(code_index_table != NULL);
|
| - code_index_table->AddFunction(func);
|
| + code_index_table->AddCode(code);
|
| // TODO(hausner): We need a way to remove these one-time execution
|
| // functions from the global code description (PC mapping) tables so
|
| // we don't pollute the system unnecessarily with stale data.
|
|
|