OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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/ast_printer.h" | 5 #include "vm/ast_printer.h" |
6 | 6 |
7 #include "vm/handles.h" | 7 #include "vm/handles.h" |
8 #include "vm/log.h" | 8 #include "vm/log.h" |
9 #include "vm/object.h" | 9 #include "vm/object.h" |
10 #include "vm/os.h" | 10 #include "vm/os.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 scope->end_token_pos().ToCString(), scope->loop_level()); | 37 scope->end_token_pos().ToCString(), scope->loop_level()); |
38 if (scope->HasContextLevel()) { | 38 if (scope->HasContextLevel()) { |
39 logger_->Print(" context %d captures %d", scope->context_level(), | 39 logger_->Print(" context %d captures %d", scope->context_level(), |
40 scope->num_context_variables()); | 40 scope->num_context_variables()); |
41 } else { | 41 } else { |
42 ASSERT(scope->num_context_variables() == 0); | 42 ASSERT(scope->num_context_variables() == 0); |
43 } | 43 } |
44 } | 44 } |
45 logger_->Print(")"); | 45 logger_->Print(")"); |
46 for (int i = 0; i < node->length(); ++i) { | 46 for (int i = 0; i < node->length(); ++i) { |
47 logger_->Print("\n"); | 47 PrintNewlineAndIndent(); |
48 for (intptr_t p = 0; p < indent_; p++) { | |
49 logger_->Print(" "); | |
50 } | |
51 node->NodeAt(i)->Visit(this); | 48 node->NodeAt(i)->Visit(this); |
52 } | 49 } |
53 logger_->Print(")"); | 50 logger_->Print(")"); |
54 indent_--; | 51 indent_--; |
55 } | 52 } |
56 | 53 |
57 | 54 |
58 void AstPrinter::VisitCloneContextNode(CloneContextNode* node) { | 55 void AstPrinter::VisitCloneContextNode(CloneContextNode* node) { |
59 VisitGenericAstNode(node); | 56 VisitGenericAstNode(node); |
60 } | 57 } |
(...skipping 20 matching lines...) Expand all Loading... |
81 kind = ""; | 78 kind = ""; |
82 UNREACHABLE(); | 79 UNREACHABLE(); |
83 } | 80 } |
84 logger_->Print("(%s %s", node->Name(), kind); | 81 logger_->Print("(%s %s", node->Name(), kind); |
85 node->VisitChildren(this); | 82 node->VisitChildren(this); |
86 logger_->Print(")"); | 83 logger_->Print(")"); |
87 } | 84 } |
88 | 85 |
89 | 86 |
90 void AstPrinter::VisitGenericLocalNode(AstNode* node, | 87 void AstPrinter::VisitGenericLocalNode(AstNode* node, |
91 const LocalVariable& var) { | 88 const LocalVariable& variable) { |
92 logger_->Print( | 89 logger_->Print("(%s ", node->Name()); |
93 "(%s %s%s \"%s\"", node->Name(), var.is_final() ? "final " : "", | 90 PrintLocalVariable(&variable); |
94 String::Handle(var.type().Name()).ToCString(), var.name().ToCString()); | |
95 if (var.HasIndex()) { | |
96 if (var.is_captured()) { | |
97 logger_->Print(" (context %d %d)", var.owner()->context_level(), | |
98 var.index()); | |
99 } else { | |
100 logger_->Print(" (stack %d)", var.index()); | |
101 } | |
102 } | |
103 logger_->Print(" "); | 91 logger_->Print(" "); |
104 node->VisitChildren(this); | 92 node->VisitChildren(this); |
105 logger_->Print(")"); | 93 logger_->Print(")"); |
106 } | 94 } |
107 | 95 |
108 | 96 |
109 void AstPrinter::VisitLoadLocalNode(LoadLocalNode* node) { | 97 void AstPrinter::VisitLoadLocalNode(LoadLocalNode* node) { |
110 VisitGenericLocalNode(node, node->local()); | 98 VisitGenericLocalNode(node, node->local()); |
111 } | 99 } |
112 | 100 |
(...skipping 26 matching lines...) Expand all Loading... |
139 void AstPrinter::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { | 127 void AstPrinter::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
140 VisitGenericFieldNode(node, node->field()); | 128 VisitGenericFieldNode(node, node->field()); |
141 } | 129 } |
142 | 130 |
143 | 131 |
144 void AstPrinter::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { | 132 void AstPrinter::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { |
145 VisitGenericFieldNode(node, node->field()); | 133 VisitGenericFieldNode(node, node->field()); |
146 } | 134 } |
147 | 135 |
148 | 136 |
| 137 void AstPrinter::PrintLocalVariable(const LocalVariable* variable) { |
| 138 logger_->Print("%s%s \"%s\"", variable->is_final() ? "final " : "", |
| 139 String::Handle(variable->type().Name()).ToCString(), |
| 140 variable->name().ToCString()); |
| 141 if (variable->HasIndex()) { |
| 142 if (variable->is_captured()) { |
| 143 logger_->Print(" (context %d %d)", variable->owner()->context_level(), |
| 144 variable->index()); |
| 145 } else { |
| 146 logger_->Print(" (stack %d)", variable->index()); |
| 147 } |
| 148 } |
| 149 } |
| 150 |
| 151 |
| 152 void AstPrinter::PrintNewlineAndIndent() { |
| 153 logger_->Print("\n"); |
| 154 for (intptr_t p = 0; p < indent_; ++p) { |
| 155 logger_->Print(" "); |
| 156 } |
| 157 } |
| 158 |
| 159 |
149 void AstPrinter::VisitLetNode(LetNode* node) { | 160 void AstPrinter::VisitLetNode(LetNode* node) { |
150 VisitGenericAstNode(node); | 161 logger_->Print("(Let ("); |
| 162 // Indent the variables and initializers by two. |
| 163 indent_ += 2; |
| 164 for (intptr_t i = 0; i < node->num_temps(); ++i) { |
| 165 if (i != 0) PrintNewlineAndIndent(); |
| 166 logger_->Print("("); |
| 167 PrintLocalVariable(node->TempAt(i)); |
| 168 logger_->Print(" "); |
| 169 node->InitializerAt(i)->Visit(this); |
| 170 logger_->Print(")"); |
| 171 } |
| 172 logger_->Print(")"); |
| 173 |
| 174 // Indent the body nodes by one. |
| 175 --indent_; |
| 176 for (intptr_t i = 0; i < node->nodes().length(); ++i) { |
| 177 PrintNewlineAndIndent(); |
| 178 node->nodes()[i]->Visit(this); |
| 179 } |
| 180 logger_->Print(")"); |
| 181 --indent_; |
151 } | 182 } |
152 | 183 |
153 | 184 |
154 void AstPrinter::VisitArrayNode(ArrayNode* node) { | 185 void AstPrinter::VisitArrayNode(ArrayNode* node) { |
155 VisitGenericAstNode(node); | 186 VisitGenericAstNode(node); |
156 } | 187 } |
157 | 188 |
158 | 189 |
159 void AstPrinter::VisitStringInterpolateNode(StringInterpolateNode* node) { | 190 void AstPrinter::VisitStringInterpolateNode(StringInterpolateNode* node) { |
160 VisitGenericAstNode(node); | 191 VisitGenericAstNode(node); |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 const char* function_name = | 565 const char* function_name = |
535 parsed_function.function().ToFullyQualifiedCString(); | 566 parsed_function.function().ToFullyQualifiedCString(); |
536 logger_->Print("Ast for function '%s' {\n", function_name); | 567 logger_->Print("Ast for function '%s' {\n", function_name); |
537 node_sequence->Visit(this); | 568 node_sequence->Visit(this); |
538 logger_->Print("}\n"); | 569 logger_->Print("}\n"); |
539 } | 570 } |
540 | 571 |
541 } // namespace dart | 572 } // namespace dart |
542 | 573 |
543 #endif // !defined(PRODUCT) | 574 #endif // !defined(PRODUCT) |
OLD | NEW |