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

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

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month 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
« no previous file with comments | « runtime/vm/ast.cc ('k') | runtime/vm/ast_printer_test.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) 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"
11 #include "vm/parser.h" 11 #include "vm/parser.h"
12 12
13 #if !defined(PRODUCT) 13 #if !defined(PRODUCT)
14 14
15 namespace dart { 15 namespace dart {
16 16
17 AstPrinter::AstPrinter(bool log) 17 AstPrinter::AstPrinter(bool log)
18 : indent_(0), 18 : indent_(0), logger_(log ? Log::Current() : Log::NoOpLog()) {}
19 logger_(log ? Log::Current() : Log::NoOpLog()) { }
20 19
21 20
22 AstPrinter::~AstPrinter() { } 21 AstPrinter::~AstPrinter() {}
23 22
24 23
25 void AstPrinter::VisitGenericAstNode(AstNode* node) { 24 void AstPrinter::VisitGenericAstNode(AstNode* node) {
26 logger_->Print("(%s ", node->Name()); 25 logger_->Print("(%s ", node->Name());
27 node->VisitChildren(this); 26 node->VisitChildren(this);
28 logger_->Print(")"); 27 logger_->Print(")");
29 } 28 }
30 29
31 30
32 void AstPrinter::VisitSequenceNode(SequenceNode* node) { 31 void AstPrinter::VisitSequenceNode(SequenceNode* node) {
33 indent_++; 32 indent_++;
34 LocalScope* scope = node->scope(); 33 LocalScope* scope = node->scope();
35 logger_->Print("(%s (scope \"%p\"", node->Name(), scope); 34 logger_->Print("(%s (scope \"%p\"", node->Name(), scope);
36 if (scope != NULL) { 35 if (scope != NULL) {
37 logger_->Print(" (%s-%s) loop %d", 36 logger_->Print(" (%s-%s) loop %d", scope->begin_token_pos().ToCString(),
38 scope->begin_token_pos().ToCString(), 37 scope->end_token_pos().ToCString(), scope->loop_level());
39 scope->end_token_pos().ToCString(),
40 scope->loop_level());
41 if (scope->HasContextLevel()) { 38 if (scope->HasContextLevel()) {
42 logger_->Print(" context %d captures %d", 39 logger_->Print(" context %d captures %d", scope->context_level(),
43 scope->context_level(), 40 scope->num_context_variables());
44 scope->num_context_variables());
45 } else { 41 } else {
46 ASSERT(scope->num_context_variables() == 0); 42 ASSERT(scope->num_context_variables() == 0);
47 } 43 }
48 } 44 }
49 logger_->Print(")"); 45 logger_->Print(")");
50 for (int i = 0; i < node->length(); ++i) { 46 for (int i = 0; i < node->length(); ++i) {
51 logger_->Print("\n"); 47 logger_->Print("\n");
52 for (intptr_t p = 0; p < indent_; p++) { 48 for (intptr_t p = 0; p < indent_; p++) {
53 logger_->Print(" "); 49 logger_->Print(" ");
54 } 50 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 UNREACHABLE(); 82 UNREACHABLE();
87 } 83 }
88 logger_->Print("(%s %s", node->Name(), kind); 84 logger_->Print("(%s %s", node->Name(), kind);
89 node->VisitChildren(this); 85 node->VisitChildren(this);
90 logger_->Print(")"); 86 logger_->Print(")");
91 } 87 }
92 88
93 89
94 void AstPrinter::VisitGenericLocalNode(AstNode* node, 90 void AstPrinter::VisitGenericLocalNode(AstNode* node,
95 const LocalVariable& var) { 91 const LocalVariable& var) {
96 logger_->Print("(%s %s%s \"%s\"", 92 logger_->Print(
97 node->Name(), 93 "(%s %s%s \"%s\"", node->Name(), var.is_final() ? "final " : "",
98 var.is_final() ? "final " : "", 94 String::Handle(var.type().Name()).ToCString(), var.name().ToCString());
99 String::Handle(var.type().Name()).ToCString(),
100 var.name().ToCString());
101 if (var.HasIndex()) { 95 if (var.HasIndex()) {
102 if (var.is_captured()) { 96 if (var.is_captured()) {
103 logger_->Print(" (context %d %d)", 97 logger_->Print(" (context %d %d)", var.owner()->context_level(),
104 var.owner()->context_level(),
105 var.index()); 98 var.index());
106 } else { 99 } else {
107 logger_->Print(" (stack %d)", var.index()); 100 logger_->Print(" (stack %d)", var.index());
108 } 101 }
109 } 102 }
110 logger_->Print(" "); 103 logger_->Print(" ");
111 node->VisitChildren(this); 104 node->VisitChildren(this);
112 logger_->Print(")"); 105 logger_->Print(")");
113 } 106 }
114 107
115 108
116 void AstPrinter::VisitLoadLocalNode(LoadLocalNode* node) { 109 void AstPrinter::VisitLoadLocalNode(LoadLocalNode* node) {
117 VisitGenericLocalNode(node, node->local()); 110 VisitGenericLocalNode(node, node->local());
118 } 111 }
119 112
120 113
121 void AstPrinter::VisitStoreLocalNode(StoreLocalNode* node) { 114 void AstPrinter::VisitStoreLocalNode(StoreLocalNode* node) {
122 VisitGenericLocalNode(node, node->local()); 115 VisitGenericLocalNode(node, node->local());
123 } 116 }
124 117
125 118
126 void AstPrinter::VisitGenericFieldNode(AstNode* node, const Field& field) { 119 void AstPrinter::VisitGenericFieldNode(AstNode* node, const Field& field) {
127 logger_->Print("(%s %s%s \"%s\" ", 120 logger_->Print(
128 node->Name(), 121 "(%s %s%s \"%s\" ", node->Name(), field.is_final() ? "final " : "",
129 field.is_final() ? "final " : "", 122 String::Handle(AbstractType::Handle(field.type()).Name()).ToCString(),
130 String::Handle(AbstractType::Handle(field.type()).Name()). 123 String::Handle(field.name()).ToCString());
131 ToCString(),
132 String::Handle(field.name()).ToCString());
133 node->VisitChildren(this); 124 node->VisitChildren(this);
134 logger_->Print(")"); 125 logger_->Print(")");
135 } 126 }
136 127
137 128
138 void AstPrinter::VisitLoadInstanceFieldNode(LoadInstanceFieldNode* node) { 129 void AstPrinter::VisitLoadInstanceFieldNode(LoadInstanceFieldNode* node) {
139 VisitGenericFieldNode(node, node->field()); 130 VisitGenericFieldNode(node, node->field());
140 } 131 }
141 132
142 133
(...skipping 28 matching lines...) Expand all
171 162
172 163
173 void AstPrinter::VisitLiteralNode(LiteralNode* node) { 164 void AstPrinter::VisitLiteralNode(LiteralNode* node) {
174 const Instance& literal = node->literal(); 165 const Instance& literal = node->literal();
175 logger_->Print("(%s \"%s\")", node->Name(), literal.ToCString()); 166 logger_->Print("(%s \"%s\")", node->Name(), literal.ToCString());
176 } 167 }
177 168
178 169
179 void AstPrinter::VisitTypeNode(TypeNode* node) { 170 void AstPrinter::VisitTypeNode(TypeNode* node) {
180 const AbstractType& type = node->type(); 171 const AbstractType& type = node->type();
181 logger_->Print("(%s \"%s\")", 172 logger_->Print("(%s \"%s\")", node->Name(),
182 node->Name(), 173 String::Handle(type.Name()).ToCString());
183 String::Handle(type.Name()).ToCString());
184 } 174 }
185 175
186 176
187 void AstPrinter::VisitAssignableNode(AssignableNode* node) { 177 void AstPrinter::VisitAssignableNode(AssignableNode* node) {
188 const AbstractType& type = node->type(); 178 const AbstractType& type = node->type();
189 const String& dst_name = node->dst_name(); 179 const String& dst_name = node->dst_name();
190 logger_->Print("(%s (type \"%s\") (of \"%s\") ", 180 logger_->Print("(%s (type \"%s\") (of \"%s\") ", node->Name(),
191 node->Name(), 181 String::Handle(type.Name()).ToCString(), dst_name.ToCString());
192 String::Handle(type.Name()).ToCString(),
193 dst_name.ToCString());
194 node->VisitChildren(this); 182 node->VisitChildren(this);
195 logger_->Print(")"); 183 logger_->Print(")");
196 } 184 }
197 185
198 186
199 void AstPrinter::VisitAwaitNode(AwaitNode* node) { 187 void AstPrinter::VisitAwaitNode(AwaitNode* node) {
200 logger_->Print("(*****%s***** (scope \"%p\") ", node->Name(), node->scope()); 188 logger_->Print("(*****%s***** (scope \"%p\") ", node->Name(), node->scope());
201 node->VisitChildren(this); 189 node->VisitChildren(this);
202 logger_->Print(")"); 190 logger_->Print(")");
203 } 191 }
204 192
205 193
206 void AstPrinter::VisitAwaitMarkerNode(AwaitMarkerNode* node) { 194 void AstPrinter::VisitAwaitMarkerNode(AwaitMarkerNode* node) {
207 logger_->Print("(%s (async_scope \"%p\" await_scope \"%p\"))", 195 logger_->Print("(%s (async_scope \"%p\" await_scope \"%p\"))", node->Name(),
208 node->Name(), 196 node->async_scope(), node->await_scope());
209 node->async_scope(),
210 node->await_scope());
211 } 197 }
212 198
213 199
214 void AstPrinter::VisitPrimaryNode(PrimaryNode* node) { 200 void AstPrinter::VisitPrimaryNode(PrimaryNode* node) {
215 logger_->Print("(*****%s***** \"%s\")", 201 logger_->Print("(*****%s***** \"%s\")", node->Name(),
216 node->Name(), 202 node->primary().ToCString());
217 node->primary().ToCString());
218 } 203 }
219 204
220 205
221 void AstPrinter::VisitComparisonNode(ComparisonNode* node) { 206 void AstPrinter::VisitComparisonNode(ComparisonNode* node) {
222 logger_->Print("(%s %s ", node->Name(), node->TokenName()); 207 logger_->Print("(%s %s ", node->Name(), node->TokenName());
223 node->VisitChildren(this); 208 node->VisitChildren(this);
224 logger_->Print(")"); 209 logger_->Print(")");
225 } 210 }
226 211
227 212
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 logger_->Print(")"); 274 logger_->Print(")");
290 } 275 }
291 276
292 277
293 void AstPrinter::VisitDoWhileNode(DoWhileNode* node) { 278 void AstPrinter::VisitDoWhileNode(DoWhileNode* node) {
294 VisitGenericAstNode(node); 279 VisitGenericAstNode(node);
295 } 280 }
296 281
297 282
298 void AstPrinter::VisitJumpNode(JumpNode* node) { 283 void AstPrinter::VisitJumpNode(JumpNode* node) {
299 logger_->Print("(%s %s %s (scope \"%p\"))", 284 logger_->Print("(%s %s %s (scope \"%p\"))", node->Name(), node->TokenName(),
300 node->Name(), 285 node->label()->name().ToCString(), node->label()->owner());
301 node->TokenName(),
302 node->label()->name().ToCString(),
303 node->label()->owner());
304 } 286 }
305 287
306 288
307 void AstPrinter::VisitInstanceCallNode(InstanceCallNode* node) { 289 void AstPrinter::VisitInstanceCallNode(InstanceCallNode* node) {
308 logger_->Print("(%s \"%s\" ", 290 logger_->Print("(%s \"%s\" ", node->Name(),
309 node->Name(), 291 node->function_name().ToCString());
310 node->function_name().ToCString());
311 node->VisitChildren(this); 292 node->VisitChildren(this);
312 logger_->Print(")"); 293 logger_->Print(")");
313 } 294 }
314 295
315 296
316 void AstPrinter::VisitStaticCallNode(StaticCallNode* node) { 297 void AstPrinter::VisitStaticCallNode(StaticCallNode* node) {
317 const char* function_fullname = node->function().ToFullyQualifiedCString(); 298 const char* function_fullname = node->function().ToFullyQualifiedCString();
318 logger_->Print("(%s \"%s\" ", node->Name(), function_fullname); 299 logger_->Print("(%s \"%s\" ", node->Name(), function_fullname);
319 node->VisitChildren(this); 300 node->VisitChildren(this);
320 logger_->Print(")"); 301 logger_->Print(")");
(...skipping 28 matching lines...) Expand all
349 330
350 331
351 void AstPrinter::VisitInstanceSetterNode(InstanceSetterNode* node) { 332 void AstPrinter::VisitInstanceSetterNode(InstanceSetterNode* node) {
352 logger_->Print("(%s \"%s\" ", node->Name(), node->field_name().ToCString()); 333 logger_->Print("(%s \"%s\" ", node->Name(), node->field_name().ToCString());
353 node->VisitChildren(this); 334 node->VisitChildren(this);
354 logger_->Print(")"); 335 logger_->Print(")");
355 } 336 }
356 337
357 338
358 void AstPrinter::VisitInitStaticFieldNode(InitStaticFieldNode* node) { 339 void AstPrinter::VisitInitStaticFieldNode(InitStaticFieldNode* node) {
359 logger_->Print("(%s \"%s\")", 340 logger_->Print("(%s \"%s\")", node->Name(),
360 node->Name(), 341 String::Handle(node->field().name()).ToCString());
361 String::Handle(node->field().name()).ToCString());
362 } 342 }
363 343
364 344
365 void AstPrinter::VisitStaticGetterNode(StaticGetterNode* node) { 345 void AstPrinter::VisitStaticGetterNode(StaticGetterNode* node) {
366 String& class_name = String::Handle(node->cls().Name()); 346 String& class_name = String::Handle(node->cls().Name());
367 logger_->Print("(%s \"%s.%s\")", 347 logger_->Print("(%s \"%s.%s\")", node->Name(), class_name.ToCString(),
368 node->Name(), 348 node->field_name().ToCString());
369 class_name.ToCString(),
370 node->field_name().ToCString());
371 } 349 }
372 350
373 351
374 void AstPrinter::VisitStaticSetterNode(StaticSetterNode* node) { 352 void AstPrinter::VisitStaticSetterNode(StaticSetterNode* node) {
375 String& class_name = String::Handle(node->cls().Name()); 353 String& class_name = String::Handle(node->cls().Name());
376 logger_->Print("(%s \"%s.%s\" ", 354 logger_->Print("(%s \"%s.%s\" ", node->Name(), class_name.ToCString(),
377 node->Name(), 355 node->field_name().ToCString());
378 class_name.ToCString(),
379 node->field_name().ToCString());
380 node->VisitChildren(this); 356 node->VisitChildren(this);
381 logger_->Print(")"); 357 logger_->Print(")");
382 } 358 }
383 359
384 360
385 void AstPrinter::VisitLoadIndexedNode(LoadIndexedNode* node) { 361 void AstPrinter::VisitLoadIndexedNode(LoadIndexedNode* node) {
386 logger_->Print("(%s%s ", node->Name(), node->IsSuperLoad() ? " super" : ""); 362 logger_->Print("(%s%s ", node->Name(), node->IsSuperLoad() ? " super" : "");
387 node->VisitChildren(this); 363 node->VisitChildren(this);
388 logger_->Print(")"); 364 logger_->Print(")");
389 } 365 }
390 366
391 367
392 void AstPrinter::VisitStoreIndexedNode(StoreIndexedNode* node) { 368 void AstPrinter::VisitStoreIndexedNode(StoreIndexedNode* node) {
393 logger_->Print("(%s%s ", node->Name(), node->IsSuperStore() ? " super" : ""); 369 logger_->Print("(%s%s ", node->Name(), node->IsSuperStore() ? " super" : "");
394 node->VisitChildren(this); 370 node->VisitChildren(this);
395 logger_->Print(")"); 371 logger_->Print(")");
396 } 372 }
397 373
398 374
399 void AstPrinter::VisitNativeBodyNode(NativeBodyNode* node) { 375 void AstPrinter::VisitNativeBodyNode(NativeBodyNode* node) {
400 logger_->Print("(%s \"%s\" (%" Pd " args))", 376 logger_->Print(
401 node->Name(), 377 "(%s \"%s\" (%" Pd " args))", node->Name(),
402 node->native_c_function_name().ToCString(), 378 node->native_c_function_name().ToCString(),
403 NativeArguments::ParameterCountForResolution(node->function())); 379 NativeArguments::ParameterCountForResolution(node->function()));
404 } 380 }
405 381
406 382
407 void AstPrinter::VisitCatchClauseNode(CatchClauseNode* node) { 383 void AstPrinter::VisitCatchClauseNode(CatchClauseNode* node) {
408 VisitGenericAstNode(node); 384 VisitGenericAstNode(node);
409 } 385 }
410 386
411 387
412 void AstPrinter::VisitTryCatchNode(TryCatchNode* node) { 388 void AstPrinter::VisitTryCatchNode(TryCatchNode* node) {
413 logger_->Print("(%s ", node->Name()); 389 logger_->Print("(%s ", node->Name());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 } 427 }
452 } 428 }
453 429
454 430
455 void AstPrinter::PrintLocalScopeVariable(const LocalScope* scope, 431 void AstPrinter::PrintLocalScopeVariable(const LocalScope* scope,
456 LocalVariable* var, 432 LocalVariable* var,
457 int indent) { 433 int indent) {
458 ASSERT(scope != NULL); 434 ASSERT(scope != NULL);
459 ASSERT(var != NULL); 435 ASSERT(var != NULL);
460 IndentN(indent); 436 IndentN(indent);
461 logger_->Print("(%s%s '%s'", 437 logger_->Print("(%s%s '%s'", var->is_final() ? "final " : "",
462 var->is_final() ? "final " : "", 438 String::Handle(var->type().Name()).ToCString(),
463 String::Handle(var->type().Name()).ToCString(), 439 var->name().ToCString());
464 var->name().ToCString());
465 if (var->owner() != scope) { 440 if (var->owner() != scope) {
466 logger_->Print(" alias"); 441 logger_->Print(" alias");
467 } 442 }
468 if (var->HasIndex()) { 443 if (var->HasIndex()) {
469 logger_->Print(" @%d", var->index()); 444 logger_->Print(" @%d", var->index());
470 if (var->is_captured()) { 445 if (var->is_captured()) {
471 logger_->Print(" ctx %d", var->owner()->context_level()); 446 logger_->Print(" ctx %d", var->owner()->context_level());
472 } 447 }
473 } else if (var->owner()->function_level() != 0) { 448 } else if (var->owner()->function_level() != 0) {
474 logger_->Print(" lev %d", var->owner()->function_level()); 449 logger_->Print(" lev %d", var->owner()->function_level());
475 } 450 }
476 logger_->Print(" valid %s-%s)\n", 451 logger_->Print(" valid %s-%s)\n", var->token_pos().ToCString(),
477 var->token_pos().ToCString(), 452 scope->end_token_pos().ToCString());
478 scope->end_token_pos().ToCString());
479 } 453 }
480 454
481 455
482 void AstPrinter::PrintLocalScope(const LocalScope* scope, 456 void AstPrinter::PrintLocalScope(const LocalScope* scope,
483 int start_index, 457 int start_index,
484 int indent) { 458 int indent) {
485 ASSERT(scope != NULL); 459 ASSERT(scope != NULL);
486 for (int i = start_index; i < scope->num_variables(); i++) { 460 for (int i = start_index; i < scope->num_variables(); i++) {
487 LocalVariable* var = scope->VariableAt(i); 461 LocalVariable* var = scope->VariableAt(i);
488 PrintLocalScopeVariable(scope, var, indent); 462 PrintLocalScopeVariable(scope, var, indent);
489 } 463 }
490 const LocalScope* child = scope->child(); 464 const LocalScope* child = scope->child();
491 while (child != NULL) { 465 while (child != NULL) {
492 IndentN(indent); 466 IndentN(indent);
493 logger_->Print("{scope %p ", child); 467 logger_->Print("{scope %p ", child);
494 if (child->HasContextLevel()) { 468 if (child->HasContextLevel()) {
495 logger_->Print("ctx %d numctxvar %d ", 469 logger_->Print("ctx %d numctxvar %d ", child->context_level(),
496 child->context_level(), 470 child->num_context_variables());
497 child->num_context_variables());
498 } 471 }
499 logger_->Print("llev %d\n", child->loop_level()); 472 logger_->Print("llev %d\n", child->loop_level());
500 PrintLocalScope(child, 0, indent + kScopeIndent); 473 PrintLocalScope(child, 0, indent + kScopeIndent);
501 IndentN(indent); 474 IndentN(indent);
502 logger_->Print("}\n"); 475 logger_->Print("}\n");
503 child = child->sibling(); 476 child = child->sibling();
504 } 477 }
505 } 478 }
506 479
507 480
508 void AstPrinter::PrintFunctionScope(const ParsedFunction& parsed_function) { 481 void AstPrinter::PrintFunctionScope(const ParsedFunction& parsed_function) {
509 HANDLESCOPE(parsed_function.thread()); 482 HANDLESCOPE(parsed_function.thread());
510 const Function& function = parsed_function.function(); 483 const Function& function = parsed_function.function();
511 SequenceNode* node_sequence = parsed_function.node_sequence(); 484 SequenceNode* node_sequence = parsed_function.node_sequence();
512 ASSERT(node_sequence != NULL); 485 ASSERT(node_sequence != NULL);
513 const LocalScope* scope = node_sequence->scope(); 486 const LocalScope* scope = node_sequence->scope();
514 ASSERT(scope != NULL); 487 ASSERT(scope != NULL);
515 const char* function_name = function.ToFullyQualifiedCString(); 488 const char* function_name = function.ToFullyQualifiedCString();
516 logger_->Print("Scope for function '%s'\n{scope %p ", function_name, scope); 489 logger_->Print("Scope for function '%s'\n{scope %p ", function_name, scope);
517 if (scope->HasContextLevel()) { 490 if (scope->HasContextLevel()) {
518 logger_->Print("ctx %d numctxvar %d ", 491 logger_->Print("ctx %d numctxvar %d ", scope->context_level(),
519 scope->context_level(), 492 scope->num_context_variables());
520 scope->num_context_variables());
521 } 493 }
522 logger_->Print("llev %d\n", scope->loop_level()); 494 logger_->Print("llev %d\n", scope->loop_level());
523 const int num_fixed_params = function.num_fixed_parameters(); 495 const int num_fixed_params = function.num_fixed_parameters();
524 const int num_params = num_fixed_params + function.NumOptionalParameters(); 496 const int num_params = num_fixed_params + function.NumOptionalParameters();
525 // Parameters must be listed first and must all appear in the top scope. 497 // Parameters must be listed first and must all appear in the top scope.
526 ASSERT(num_params <= scope->num_variables()); 498 ASSERT(num_params <= scope->num_variables());
527 int pos = 0; // Current position of variable in scope. 499 int pos = 0; // Current position of variable in scope.
528 int indent = kScopeIndent; 500 int indent = kScopeIndent;
529 while (pos < num_params) { 501 while (pos < num_params) {
530 LocalVariable* param = scope->VariableAt(pos); 502 LocalVariable* param = scope->VariableAt(pos);
531 ASSERT(param->owner() == scope); // No aliases should precede parameters. 503 ASSERT(param->owner() == scope); // No aliases should precede parameters.
532 IndentN(indent); 504 IndentN(indent);
533 logger_->Print("(param %s%s '%s'", 505 logger_->Print("(param %s%s '%s'", param->is_final() ? "final " : "",
534 param->is_final() ? "final " : "", 506 String::Handle(param->type().Name()).ToCString(),
535 String::Handle(param->type().Name()).ToCString(), 507 param->name().ToCString());
536 param->name().ToCString());
537 // Print the default value if the parameter is optional. 508 // Print the default value if the parameter is optional.
538 if (pos >= num_fixed_params && pos < num_params) { 509 if (pos >= num_fixed_params && pos < num_params) {
539 const Instance& default_parameter_value = 510 const Instance& default_parameter_value =
540 parsed_function.DefaultParameterValueAt(pos - num_fixed_params); 511 parsed_function.DefaultParameterValueAt(pos - num_fixed_params);
541 logger_->Print(" =%s", default_parameter_value.ToCString()); 512 logger_->Print(" =%s", default_parameter_value.ToCString());
542 } 513 }
543 if (param->HasIndex()) { 514 if (param->HasIndex()) {
544 logger_->Print(" @%d", param->index()); 515 logger_->Print(" @%d", param->index());
545 if (param->is_captured()) { 516 if (param->is_captured()) {
546 logger_->Print(" ctx %d", param->owner()->context_level()); 517 logger_->Print(" ctx %d", param->owner()->context_level());
547 } 518 }
548 } 519 }
549 logger_->Print(" valid %s-%s)\n", 520 logger_->Print(" valid %s-%s)\n", param->token_pos().ToCString(),
550 param->token_pos().ToCString(), 521 scope->end_token_pos().ToCString());
551 scope->end_token_pos().ToCString());
552 pos++; 522 pos++;
553 } 523 }
554 // Visit remaining non-parameter variables and children scopes. 524 // Visit remaining non-parameter variables and children scopes.
555 PrintLocalScope(scope, pos, indent); 525 PrintLocalScope(scope, pos, indent);
556 logger_->Print("}\n"); 526 logger_->Print("}\n");
557 } 527 }
558 528
559 529
560 void AstPrinter::PrintFunctionNodes(const ParsedFunction& parsed_function) { 530 void AstPrinter::PrintFunctionNodes(const ParsedFunction& parsed_function) {
561 HANDLESCOPE(parsed_function.thread()); 531 HANDLESCOPE(parsed_function.thread());
562 SequenceNode* node_sequence = parsed_function.node_sequence(); 532 SequenceNode* node_sequence = parsed_function.node_sequence();
563 ASSERT(node_sequence != NULL); 533 ASSERT(node_sequence != NULL);
564 const char* function_name = 534 const char* function_name =
565 parsed_function.function().ToFullyQualifiedCString(); 535 parsed_function.function().ToFullyQualifiedCString();
566 logger_->Print("Ast for function '%s' {\n", function_name); 536 logger_->Print("Ast for function '%s' {\n", function_name);
567 node_sequence->Visit(this); 537 node_sequence->Visit(this);
568 logger_->Print("}\n"); 538 logger_->Print("}\n");
569 } 539 }
570 540
571 } // namespace dart 541 } // namespace dart
572 542
573 #endif // !defined(PRODUCT) 543 #endif // !defined(PRODUCT)
OLDNEW
« no previous file with comments | « runtime/vm/ast.cc ('k') | runtime/vm/ast_printer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698