| OLD | NEW |
| 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/il_printer.h" | 5 #include "vm/il_printer.h" |
| 6 | 6 |
| 7 #include "vm/intermediate_language.h" | 7 #include "vm/intermediate_language.h" |
| 8 #include "vm/os.h" | 8 #include "vm/os.h" |
| 9 #include "vm/parser.h" | 9 #include "vm/parser.h" |
| 10 | 10 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 } | 66 } |
| 67 | 67 |
| 68 | 68 |
| 69 void FlowGraphPrinter::PrintInstruction(Instruction* instr) { | 69 void FlowGraphPrinter::PrintInstruction(Instruction* instr) { |
| 70 PrintOneInstruction(instr, print_locations_); | 70 PrintOneInstruction(instr, print_locations_); |
| 71 } | 71 } |
| 72 | 72 |
| 73 | 73 |
| 74 void FlowGraphPrinter::PrintOneInstruction(Instruction* instr, | 74 void FlowGraphPrinter::PrintOneInstruction(Instruction* instr, |
| 75 bool print_locations) { | 75 bool print_locations) { |
| 76 char str[1000]; | 76 char str[4000]; |
| 77 BufferFormatter f(str, sizeof(str)); | 77 BufferFormatter f(str, sizeof(str)); |
| 78 instr->PrintTo(&f); | 78 instr->PrintTo(&f); |
| 79 if (FLAG_print_environments && (instr->env() != NULL)) { | 79 if (FLAG_print_environments && (instr->env() != NULL)) { |
| 80 instr->env()->PrintTo(&f); | 80 instr->env()->PrintTo(&f); |
| 81 } | 81 } |
| 82 if (print_locations && (instr->locs() != NULL)) { | 82 if (print_locations && (instr->locs() != NULL)) { |
| 83 instr->locs()->PrintTo(&f); | 83 instr->locs()->PrintTo(&f); |
| 84 } | 84 } |
| 85 if (instr->lifetime_position() != -1) { | 85 if (instr->lifetime_position() != -1) { |
| 86 OS::Print("%3" Pd ": ", instr->lifetime_position()); | 86 OS::Print("%3" Pd ": ", instr->lifetime_position()); |
| 87 } | 87 } |
| 88 if (!instr->IsBlockEntry()) OS::Print(" "); | 88 if (!instr->IsBlockEntry()) OS::Print(" "); |
| 89 OS::Print("%s", str); | 89 OS::Print("%s", str); |
| 90 } | 90 } |
| 91 | 91 |
| 92 | 92 |
| 93 void FlowGraphPrinter::PrintTypeCheck(const ParsedFunction& parsed_function, | 93 void FlowGraphPrinter::PrintTypeCheck(const ParsedFunction& parsed_function, |
| 94 intptr_t token_pos, | 94 intptr_t token_pos, |
| 95 Value* value, | 95 Value* value, |
| 96 const AbstractType& dst_type, | 96 const AbstractType& dst_type, |
| 97 const String& dst_name, | 97 const String& dst_name, |
| 98 bool eliminated) { | 98 bool eliminated) { |
| 99 const char* compile_type_name = "unknown"; | 99 const char* compile_type_name = "unknown"; |
| 100 if (value != NULL) { | 100 if (value != NULL && value->reaching_type_ != NULL) { |
| 101 compile_type_name = value->Type()->ToCString(); | 101 compile_type_name = value->reaching_type_->ToCString(); |
| 102 } | 102 } |
| 103 OS::Print("%s type check: compile type %s is %s specific than " | 103 OS::Print("%s type check: compile type %s is %s specific than " |
| 104 "type '%s' of '%s'.\n", | 104 "type '%s' of '%s'.\n", |
| 105 eliminated ? "Eliminated" : "Generated", | 105 eliminated ? "Eliminated" : "Generated", |
| 106 compile_type_name, | 106 compile_type_name, |
| 107 eliminated ? "more" : "not more", | 107 eliminated ? "more" : "not more", |
| 108 String::Handle(dst_type.Name()).ToCString(), | 108 String::Handle(dst_type.Name()).ToCString(), |
| 109 dst_name.ToCString()); | 109 dst_name.ToCString()); |
| 110 } | 110 } |
| 111 | 111 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 for (int i = 0; i < InputCount(); ++i) { | 225 for (int i = 0; i < InputCount(); ++i) { |
| 226 if (i > 0) f->Print(", "); | 226 if (i > 0) f->Print(", "); |
| 227 if (InputAt(i) != NULL) InputAt(i)->PrintTo(f); | 227 if (InputAt(i) != NULL) InputAt(i)->PrintTo(f); |
| 228 } | 228 } |
| 229 } | 229 } |
| 230 | 230 |
| 231 | 231 |
| 232 void Value::PrintTo(BufferFormatter* f) const { | 232 void Value::PrintTo(BufferFormatter* f) const { |
| 233 PrintUse(f, *definition()); | 233 PrintUse(f, *definition()); |
| 234 if ((reaching_type_ != NULL) && | 234 if ((reaching_type_ != NULL) && |
| 235 (reaching_type_ != definition()->Type())) { | 235 (reaching_type_ != definition()->type_)) { |
| 236 f->Print(" "); | 236 f->Print(" "); |
| 237 reaching_type_->PrintTo(f); | 237 reaching_type_->PrintTo(f); |
| 238 } | 238 } |
| 239 } | 239 } |
| 240 | 240 |
| 241 | 241 |
| 242 void ConstantInstr::PrintOperandsTo(BufferFormatter* f) const { | 242 void ConstantInstr::PrintOperandsTo(BufferFormatter* f) const { |
| 243 const char* cstr = value().ToCString(); | 243 const char* cstr = value().ToCString(); |
| 244 const char* new_line = strchr(cstr, '\n'); | 244 const char* new_line = strchr(cstr, '\n'); |
| 245 if (new_line == NULL) { | 245 if (new_line == NULL) { |
| (...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 979 f->Print(" ["); | 979 f->Print(" ["); |
| 980 locations_[i].PrintTo(f); | 980 locations_[i].PrintTo(f); |
| 981 f->Print("]"); | 981 f->Print("]"); |
| 982 } | 982 } |
| 983 } | 983 } |
| 984 f->Print(" }"); | 984 f->Print(" }"); |
| 985 if (outer_ != NULL) outer_->PrintTo(f); | 985 if (outer_ != NULL) outer_->PrintTo(f); |
| 986 } | 986 } |
| 987 | 987 |
| 988 } // namespace dart | 988 } // namespace dart |
| OLD | NEW |