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

Side by Side Diff: runtime/vm/compiler.cc

Issue 23072026: fix cpp11 compile errors (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/compiler_stats.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/compiler.h" 5 #include "vm/compiler.h"
6 6
7 #include "vm/assembler.h" 7 #include "vm/assembler.h"
8 8
9 #include "vm/ast_printer.h" 9 #include "vm/ast_printer.h"
10 #include "vm/code_generator.h" 10 #include "vm/code_generator.h"
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 } 222 }
223 UNREACHABLE(); 223 UNREACHABLE();
224 return Error::null(); 224 return Error::null();
225 } 225 }
226 226
227 227
228 static void InstallUnoptimizedCode(const Function& function) { 228 static void InstallUnoptimizedCode(const Function& function) {
229 // Disable optimized code. 229 // Disable optimized code.
230 ASSERT(function.HasOptimizedCode()); 230 ASSERT(function.HasOptimizedCode());
231 if (FLAG_trace_compiler) { 231 if (FLAG_trace_compiler) {
232 OS::Print("--> patching entry %#"Px"\n", 232 OS::Print("--> patching entry %#" Px "\n",
233 Code::Handle(function.CurrentCode()).EntryPoint()); 233 Code::Handle(function.CurrentCode()).EntryPoint());
234 } 234 }
235 function.SwitchToUnoptimizedCode(); 235 function.SwitchToUnoptimizedCode();
236 if (FLAG_trace_compiler) { 236 if (FLAG_trace_compiler) {
237 OS::Print("--> restoring entry at %#"Px"\n", 237 OS::Print("--> restoring entry at %#" Px "\n",
238 Code::Handle(function.unoptimized_code()).EntryPoint()); 238 Code::Handle(function.unoptimized_code()).EntryPoint());
239 } 239 }
240 } 240 }
241 241
242 242
243 // Return false if bailed out. 243 // Return false if bailed out.
244 static bool CompileParsedFunctionHelper(ParsedFunction* parsed_function, 244 static bool CompileParsedFunctionHelper(ParsedFunction* parsed_function,
245 bool optimized, 245 bool optimized,
246 intptr_t osr_id) { 246 intptr_t osr_id) {
247 const Function& function = parsed_function->function(); 247 const Function& function = parsed_function->function();
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 graph_compiler.FinalizeStackmaps(code); 521 graph_compiler.FinalizeStackmaps(code);
522 graph_compiler.FinalizeVarDescriptors(code); 522 graph_compiler.FinalizeVarDescriptors(code);
523 graph_compiler.FinalizeExceptionHandlers(code); 523 graph_compiler.FinalizeExceptionHandlers(code);
524 graph_compiler.FinalizeComments(code); 524 graph_compiler.FinalizeComments(code);
525 graph_compiler.FinalizeStaticCallTargetsTable(code); 525 graph_compiler.FinalizeStaticCallTargetsTable(code);
526 526
527 if (optimized) { 527 if (optimized) {
528 if (osr_id == Isolate::kNoDeoptId) { 528 if (osr_id == Isolate::kNoDeoptId) {
529 CodePatcher::PatchEntry(Code::Handle(function.CurrentCode())); 529 CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
530 if (FLAG_trace_compiler) { 530 if (FLAG_trace_compiler) {
531 OS::Print("--> patching entry %#"Px"\n", 531 OS::Print("--> patching entry %#" Px "\n",
532 Code::Handle(function.unoptimized_code()).EntryPoint()); 532 Code::Handle(function.unoptimized_code()).EntryPoint());
533 } 533 }
534 } 534 }
535 function.SetCode(code); 535 function.SetCode(code);
536 536
537 for (intptr_t i = 0; i < guarded_fields.length(); i++) { 537 for (intptr_t i = 0; i < guarded_fields.length(); i++) {
538 const Field& field = *guarded_fields[i]; 538 const Field& field = *guarded_fields[i];
539 field.RegisterDependentCode(code); 539 field.RegisterDependentCode(code);
540 } 540 }
541 } else { 541 } else {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 const Code& code = Code::Handle(function.CurrentCode()); 588 const Code& code = Code::Handle(function.CurrentCode());
589 code.Disassemble(); 589 code.Disassemble();
590 OS::Print("}\n"); 590 OS::Print("}\n");
591 591
592 OS::Print("Pointer offsets for function: {\n"); 592 OS::Print("Pointer offsets for function: {\n");
593 // Pointer offsets are stored in descending order. 593 // Pointer offsets are stored in descending order.
594 for (intptr_t i = code.pointer_offsets_length() - 1; i >= 0; i--) { 594 for (intptr_t i = code.pointer_offsets_length() - 1; i >= 0; i--) {
595 const uword addr = code.GetPointerOffsetAt(i) + code.EntryPoint(); 595 const uword addr = code.GetPointerOffsetAt(i) + code.EntryPoint();
596 Object& obj = Object::Handle(); 596 Object& obj = Object::Handle();
597 obj = *reinterpret_cast<RawObject**>(addr); 597 obj = *reinterpret_cast<RawObject**>(addr);
598 OS::Print(" %d : %#"Px" '%s'\n", 598 OS::Print(" %d : %#" Px " '%s'\n",
599 code.GetPointerOffsetAt(i), addr, obj.ToCString()); 599 code.GetPointerOffsetAt(i), addr, obj.ToCString());
600 } 600 }
601 OS::Print("}\n"); 601 OS::Print("}\n");
602 602
603 OS::Print("PC Descriptors for function '%s' {\n", function_fullname); 603 OS::Print("PC Descriptors for function '%s' {\n", function_fullname);
604 PcDescriptors::PrintHeaderString(); 604 PcDescriptors::PrintHeaderString();
605 const PcDescriptors& descriptors = 605 const PcDescriptors& descriptors =
606 PcDescriptors::Handle(code.pc_descriptors()); 606 PcDescriptors::Handle(code.pc_descriptors());
607 OS::Print("%s}\n", descriptors.ToCString()); 607 OS::Print("%s}\n", descriptors.ToCString());
608 608
609 uword start = Instructions::Handle(code.instructions()).EntryPoint(); 609 uword start = Instructions::Handle(code.instructions()).EntryPoint();
610 const Array& deopt_table = Array::Handle(code.deopt_info_array()); 610 const Array& deopt_table = Array::Handle(code.deopt_info_array());
611 intptr_t deopt_table_length = DeoptTable::GetLength(deopt_table); 611 intptr_t deopt_table_length = DeoptTable::GetLength(deopt_table);
612 if (deopt_table_length > 0) { 612 if (deopt_table_length > 0) {
613 OS::Print("DeoptInfo: {\n"); 613 OS::Print("DeoptInfo: {\n");
614 Smi& offset = Smi::Handle(); 614 Smi& offset = Smi::Handle();
615 DeoptInfo& info = DeoptInfo::Handle(); 615 DeoptInfo& info = DeoptInfo::Handle();
616 Smi& reason = Smi::Handle(); 616 Smi& reason = Smi::Handle();
617 for (intptr_t i = 0; i < deopt_table_length; ++i) { 617 for (intptr_t i = 0; i < deopt_table_length; ++i) {
618 DeoptTable::GetEntry(deopt_table, i, &offset, &info, &reason); 618 DeoptTable::GetEntry(deopt_table, i, &offset, &info, &reason);
619 OS::Print("%4"Pd": 0x%"Px" %s (%s)\n", 619 OS::Print("%4" Pd ": 0x%" Px " %s (%s)\n",
620 i, 620 i,
621 start + offset.Value(), 621 start + offset.Value(),
622 info.ToCString(), 622 info.ToCString(),
623 DeoptReasonToText(reason.Value())); 623 DeoptReasonToText(reason.Value()));
624 } 624 }
625 OS::Print("}\n"); 625 OS::Print("}\n");
626 } 626 }
627 627
628 const Array& object_table = Array::Handle(code.object_table()); 628 const Array& object_table = Array::Handle(code.object_table());
629 if (object_table.Length() > 0) { 629 if (object_table.Length() > 0) {
630 OS::Print("Object Table: {\n"); 630 OS::Print("Object Table: {\n");
631 for (intptr_t i = 0; i < object_table.Length(); i++) { 631 for (intptr_t i = 0; i < object_table.Length(); i++) {
632 OS::Print(" %"Pd": %s\n", i, 632 OS::Print(" %" Pd ": %s\n", i,
633 Object::Handle(object_table.At(i)).ToCString()); 633 Object::Handle(object_table.At(i)).ToCString());
634 } 634 }
635 OS::Print("}\n"); 635 OS::Print("}\n");
636 } 636 }
637 637
638 OS::Print("Stackmaps for function '%s' {\n", function_fullname); 638 OS::Print("Stackmaps for function '%s' {\n", function_fullname);
639 if (code.stackmaps() != Array::null()) { 639 if (code.stackmaps() != Array::null()) {
640 const Array& stackmap_table = Array::Handle(code.stackmaps()); 640 const Array& stackmap_table = Array::Handle(code.stackmaps());
641 Stackmap& map = Stackmap::Handle(); 641 Stackmap& map = Stackmap::Handle();
642 for (intptr_t i = 0; i < stackmap_table.Length(); ++i) { 642 for (intptr_t i = 0; i < stackmap_table.Length(); ++i) {
643 map ^= stackmap_table.At(i); 643 map ^= stackmap_table.At(i);
644 OS::Print("%s\n", map.ToCString()); 644 OS::Print("%s\n", map.ToCString());
645 } 645 }
646 } 646 }
647 OS::Print("}\n"); 647 OS::Print("}\n");
648 648
649 OS::Print("Variable Descriptors for function '%s' {\n", 649 OS::Print("Variable Descriptors for function '%s' {\n",
650 function_fullname); 650 function_fullname);
651 const LocalVarDescriptors& var_descriptors = 651 const LocalVarDescriptors& var_descriptors =
652 LocalVarDescriptors::Handle(code.var_descriptors()); 652 LocalVarDescriptors::Handle(code.var_descriptors());
653 intptr_t var_desc_length = 653 intptr_t var_desc_length =
654 var_descriptors.IsNull() ? 0 : var_descriptors.Length(); 654 var_descriptors.IsNull() ? 0 : var_descriptors.Length();
655 String& var_name = String::Handle(); 655 String& var_name = String::Handle();
656 for (intptr_t i = 0; i < var_desc_length; i++) { 656 for (intptr_t i = 0; i < var_desc_length; i++) {
657 var_name = var_descriptors.GetName(i); 657 var_name = var_descriptors.GetName(i);
658 RawLocalVarDescriptors::VarInfo var_info; 658 RawLocalVarDescriptors::VarInfo var_info;
659 var_descriptors.GetInfo(i, &var_info); 659 var_descriptors.GetInfo(i, &var_info);
660 if (var_info.kind == RawLocalVarDescriptors::kSavedEntryContext) { 660 if (var_info.kind == RawLocalVarDescriptors::kSavedEntryContext) {
661 OS::Print(" saved caller's CTX reg offset %"Pd"\n", var_info.index); 661 OS::Print(" saved caller's CTX reg offset %" Pd "\n", var_info.index);
662 } else if (var_info.kind == RawLocalVarDescriptors::kSavedCurrentContext) { 662 } else if (var_info.kind == RawLocalVarDescriptors::kSavedCurrentContext) {
663 OS::Print(" saved current CTX reg offset %"Pd"\n", var_info.index); 663 OS::Print(" saved current CTX reg offset %" Pd "\n", var_info.index);
664 } else { 664 } else {
665 if (var_info.kind == RawLocalVarDescriptors::kContextLevel) { 665 if (var_info.kind == RawLocalVarDescriptors::kContextLevel) {
666 OS::Print(" context level %"Pd" scope %d", 666 OS::Print(" context level %" Pd " scope %d",
667 var_info.index, var_info.scope_id); 667 var_info.index, var_info.scope_id);
668 } else if (var_info.kind == RawLocalVarDescriptors::kStackVar) { 668 } else if (var_info.kind == RawLocalVarDescriptors::kStackVar) {
669 OS::Print(" stack var '%s' offset %"Pd"", 669 OS::Print(" stack var '%s' offset %" Pd "",
670 var_name.ToCString(), var_info.index); 670 var_name.ToCString(), var_info.index);
671 } else { 671 } else {
672 ASSERT(var_info.kind == RawLocalVarDescriptors::kContextVar); 672 ASSERT(var_info.kind == RawLocalVarDescriptors::kContextVar);
673 OS::Print(" context var '%s' level %d offset %"Pd"", 673 OS::Print(" context var '%s' level %d offset %" Pd "",
674 var_name.ToCString(), var_info.scope_id, var_info.index); 674 var_name.ToCString(), var_info.scope_id, var_info.index);
675 } 675 }
676 OS::Print(" (valid %"Pd"-%"Pd")\n", 676 OS::Print(" (valid %" Pd "-%" Pd ")\n",
677 var_info.begin_pos, var_info.end_pos); 677 var_info.begin_pos, var_info.end_pos);
678 } 678 }
679 } 679 }
680 OS::Print("}\n"); 680 OS::Print("}\n");
681 681
682 OS::Print("Exception Handlers for function '%s' {\n", function_fullname); 682 OS::Print("Exception Handlers for function '%s' {\n", function_fullname);
683 const ExceptionHandlers& handlers = 683 const ExceptionHandlers& handlers =
684 ExceptionHandlers::Handle(code.exception_handlers()); 684 ExceptionHandlers::Handle(code.exception_handlers());
685 OS::Print("%s}\n", handlers.ToCString()); 685 OS::Print("%s}\n", handlers.ToCString());
686 686
687 { 687 {
688 OS::Print("Static call target functions {\n"); 688 OS::Print("Static call target functions {\n");
689 const Array& table = Array::Handle(code.static_calls_target_table()); 689 const Array& table = Array::Handle(code.static_calls_target_table());
690 Smi& offset = Smi::Handle(); 690 Smi& offset = Smi::Handle();
691 Function& function = Function::Handle(); 691 Function& function = Function::Handle();
692 Code& code = Code::Handle(); 692 Code& code = Code::Handle();
693 for (intptr_t i = 0; i < table.Length(); 693 for (intptr_t i = 0; i < table.Length();
694 i += Code::kSCallTableEntryLength) { 694 i += Code::kSCallTableEntryLength) {
695 offset ^= table.At(i + Code::kSCallTableOffsetEntry); 695 offset ^= table.At(i + Code::kSCallTableOffsetEntry);
696 function ^= table.At(i + Code::kSCallTableFunctionEntry); 696 function ^= table.At(i + Code::kSCallTableFunctionEntry);
697 code ^= table.At(i + Code::kSCallTableCodeEntry); 697 code ^= table.At(i + Code::kSCallTableCodeEntry);
698 OS::Print(" 0x%"Px": %s, %p\n", 698 OS::Print(" 0x%" Px ": %s, %p\n",
699 start + offset.Value(), 699 start + offset.Value(),
700 function.ToFullyQualifiedCString(), 700 function.ToFullyQualifiedCString(),
701 code.raw()); 701 code.raw());
702 } 702 }
703 OS::Print("}\n"); 703 OS::Print("}\n");
704 } 704 }
705 } 705 }
706 706
707 707
708 static RawError* CompileFunctionHelper(const Function& function, 708 static RawError* CompileFunctionHelper(const Function& function,
(...skipping 10 matching lines...) Expand all
719 isolate->set_long_jump_base(base); 719 isolate->set_long_jump_base(base);
720 return Error::null(); 720 return Error::null();
721 } 721 }
722 if (setjmp(*jump.Set()) == 0) { 722 if (setjmp(*jump.Set()) == 0) {
723 TIMERSCOPE(time_compilation); 723 TIMERSCOPE(time_compilation);
724 Timer per_compile_timer(FLAG_trace_compiler, "Compilation time"); 724 Timer per_compile_timer(FLAG_trace_compiler, "Compilation time");
725 per_compile_timer.Start(); 725 per_compile_timer.Start();
726 ParsedFunction* parsed_function = new ParsedFunction( 726 ParsedFunction* parsed_function = new ParsedFunction(
727 Function::ZoneHandle(function.raw())); 727 Function::ZoneHandle(function.raw()));
728 if (FLAG_trace_compiler) { 728 if (FLAG_trace_compiler) {
729 OS::Print("Compiling %s%sfunction: '%s' @ token %"Pd", size %"Pd"\n", 729 OS::Print("Compiling %s%sfunction: '%s' @ token %" Pd ", size %" Pd "\n",
730 (osr_id == Isolate::kNoDeoptId ? "" : "osr "), 730 (osr_id == Isolate::kNoDeoptId ? "" : "osr "),
731 (optimized ? "optimized " : ""), 731 (optimized ? "optimized " : ""),
732 function.ToFullyQualifiedCString(), 732 function.ToFullyQualifiedCString(),
733 function.token_pos(), 733 function.token_pos(),
734 (function.end_token_pos() - function.token_pos())); 734 (function.end_token_pos() - function.token_pos()));
735 } 735 }
736 { 736 {
737 HANDLESCOPE(isolate); 737 HANDLESCOPE(isolate);
738 Parser::ParseFunction(parsed_function); 738 Parser::ParseFunction(parsed_function);
739 parsed_function->AllocateVariables(); 739 parsed_function->AllocateVariables();
(...skipping 11 matching lines...) Expand all
751 } 751 }
752 function.set_is_optimizable(false); 752 function.set_is_optimizable(false);
753 isolate->set_long_jump_base(base); 753 isolate->set_long_jump_base(base);
754 return Error::null(); 754 return Error::null();
755 } 755 }
756 756
757 ASSERT(success); 757 ASSERT(success);
758 per_compile_timer.Stop(); 758 per_compile_timer.Stop();
759 759
760 if (FLAG_trace_compiler) { 760 if (FLAG_trace_compiler) {
761 OS::Print("--> '%s' entry: %#"Px" size: %"Pd" time: %"Pd64" us\n", 761 OS::Print("--> '%s' entry: %#" Px " size: %" Pd " time: %" Pd64 " us\n",
762 function.ToFullyQualifiedCString(), 762 function.ToFullyQualifiedCString(),
763 Code::Handle(function.CurrentCode()).EntryPoint(), 763 Code::Handle(function.CurrentCode()).EntryPoint(),
764 Code::Handle(function.CurrentCode()).Size(), 764 Code::Handle(function.CurrentCode()).Size(),
765 per_compile_timer.TotalElapsedTime()); 765 per_compile_timer.TotalElapsedTime());
766 } 766 }
767 767
768 isolate->debugger()->NotifyCompilation(function); 768 isolate->debugger()->NotifyCompilation(function);
769 769
770 if (FLAG_disassemble) { 770 if (FLAG_disassemble) {
771 DisassembleCode(function, optimized); 771 DisassembleCode(function, optimized);
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 Object::Handle(isolate->object_store()->sticky_error()); 908 Object::Handle(isolate->object_store()->sticky_error());
909 isolate->object_store()->clear_sticky_error(); 909 isolate->object_store()->clear_sticky_error();
910 isolate->set_long_jump_base(base); 910 isolate->set_long_jump_base(base);
911 return result.raw(); 911 return result.raw();
912 } 912 }
913 UNREACHABLE(); 913 UNREACHABLE();
914 return Object::null(); 914 return Object::null();
915 } 915 }
916 916
917 } // namespace dart 917 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/compiler_stats.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698