| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 library dart2js.ir_tracer; | 5 library dart2js.ir_tracer; |
| 6 | 6 |
| 7 import 'dart:async' show EventSink; | 7 import 'dart:async' show EventSink; |
| 8 import 'cps_ir_nodes.dart' as cps_ir hide Function; | 8 import 'cps_ir_nodes.dart' as cps_ir hide Function; |
| 9 import '../tracer.dart'; | 9 import '../tracer.dart'; |
| 10 | 10 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 String dummy = names.name(node); | 186 String dummy = names.name(node); |
| 187 String value = formatReference(node.value); | 187 String value = formatReference(node.value); |
| 188 printStmt(dummy, "Throw $value"); | 188 printStmt(dummy, "Throw $value"); |
| 189 } | 189 } |
| 190 | 190 |
| 191 visitRethrow(cps_ir.Rethrow node) { | 191 visitRethrow(cps_ir.Rethrow node) { |
| 192 String dummy = names.name(node); | 192 String dummy = names.name(node); |
| 193 printStmt(dummy, "Rethrow"); | 193 printStmt(dummy, "Rethrow"); |
| 194 } | 194 } |
| 195 | 195 |
| 196 visitUnreachable(cps_ir.Unreachable node) { |
| 197 String dummy = names.name(node); |
| 198 printStmt(dummy, 'Unreachable'); |
| 199 } |
| 200 |
| 196 visitLiteralList(cps_ir.LiteralList node) { | 201 visitLiteralList(cps_ir.LiteralList node) { |
| 197 String dummy = names.name(node); | 202 String dummy = names.name(node); |
| 198 String values = node.values.map(formatReference).join(', '); | 203 String values = node.values.map(formatReference).join(', '); |
| 199 printStmt(dummy, "LiteralList ($values)"); | 204 printStmt(dummy, "LiteralList ($values)"); |
| 200 } | 205 } |
| 201 | 206 |
| 202 visitLiteralMap(cps_ir.LiteralMap node) { | 207 visitLiteralMap(cps_ir.LiteralMap node) { |
| 203 String dummy = names.name(node); | 208 String dummy = names.name(node); |
| 204 List<String> entries = new List<String>(); | 209 List<String> entries = new List<String>(); |
| 205 for (cps_ir.LiteralMapEntry entry in node.entries) { | 210 for (cps_ir.LiteralMapEntry entry in node.entries) { |
| 206 String key = formatReference(entry.key); | 211 String key = formatReference(entry.key); |
| 207 String value = formatReference(entry.value); | 212 String value = formatReference(entry.value); |
| 208 entries.add("$key: $value"); | 213 entries.add("$key: $value"); |
| 209 } | 214 } |
| 210 printStmt(dummy, "LiteralMap (${entries.join(', ')})"); | 215 printStmt(dummy, "LiteralMap (${entries.join(', ')})"); |
| 211 } | 216 } |
| 212 | 217 |
| 213 visitTypeOperator(cps_ir.TypeOperator node) { | 218 visitTypeCast(cps_ir.TypeCast node) { |
| 214 String dummy = names.name(node); | 219 String dummy = names.name(node); |
| 215 String operator = node.isTypeTest ? 'is' : 'as'; | |
| 216 List<String> entries = new List<String>(); | |
| 217 String value = formatReference(node.value); | 220 String value = formatReference(node.value); |
| 221 String args = node.typeArguments.map(formatReference).join(', '); |
| 218 String kont = formatReference(node.continuation); | 222 String kont = formatReference(node.continuation); |
| 219 printStmt(dummy, "TypeOperator ($operator $value ${node.type}) $kont"); | 223 printStmt(dummy, "TypeCast ($value ${node.type} ($args)) $kont"); |
| 220 } | 224 } |
| 221 | 225 |
| 222 visitInvokeContinuation(cps_ir.InvokeContinuation node) { | 226 visitInvokeContinuation(cps_ir.InvokeContinuation node) { |
| 223 String dummy = names.name(node); | 227 String dummy = names.name(node); |
| 224 String kont = formatReference(node.continuation); | 228 String kont = formatReference(node.continuation); |
| 225 String args = node.arguments.map(formatReference).join(', '); | 229 String args = node.arguments.map(formatReference).join(', '); |
| 226 printStmt(dummy, "InvokeContinuation $kont ($args)"); | 230 printStmt(dummy, "InvokeContinuation $kont ($args)"); |
| 227 } | 231 } |
| 228 | 232 |
| 229 visitBranch(cps_ir.Branch node) { | 233 visitBranch(cps_ir.Branch node) { |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 | 358 |
| 355 visitNonTailThrow(cps_ir.NonTailThrow node) { | 359 visitNonTailThrow(cps_ir.NonTailThrow node) { |
| 356 String value = formatReference(node.value); | 360 String value = formatReference(node.value); |
| 357 return "NonTailThrow($value)"; | 361 return "NonTailThrow($value)"; |
| 358 } | 362 } |
| 359 | 363 |
| 360 visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) { | 364 visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) { |
| 361 String args = node.arguments.map(formatReference).join(', '); | 365 String args = node.arguments.map(formatReference).join(', '); |
| 362 return "CreateInvocationMirror(${node.selector.name}, $args)"; | 366 return "CreateInvocationMirror(${node.selector.name}, $args)"; |
| 363 } | 367 } |
| 368 |
| 369 visitTypeTest(cps_ir.TypeTest node) { |
| 370 String value = formatReference(node.value); |
| 371 String args = node.typeArguments.map(formatReference).join(', '); |
| 372 return "TypeTest ($value ${node.type} ($args))"; |
| 373 } |
| 364 } | 374 } |
| 365 | 375 |
| 366 /** | 376 /** |
| 367 * Invents (and remembers) names for Continuations, Parameters, etc. | 377 * Invents (and remembers) names for Continuations, Parameters, etc. |
| 368 * The names must match the conventions used by IR Hydra, e.g. | 378 * The names must match the conventions used by IR Hydra, e.g. |
| 369 * Continuations and Functions must have names of form B### since they | 379 * Continuations and Functions must have names of form B### since they |
| 370 * are visualized as basic blocks. | 380 * are visualized as basic blocks. |
| 371 */ | 381 */ |
| 372 class Names { | 382 class Names { |
| 373 final Map<Object, String> names = {}; | 383 final Map<Object, String> names = {}; |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 visitConcatenateStrings(cps_ir.ConcatenateStrings exp) { | 500 visitConcatenateStrings(cps_ir.ConcatenateStrings exp) { |
| 491 addEdgeToContinuation(exp.continuation); | 501 addEdgeToContinuation(exp.continuation); |
| 492 } | 502 } |
| 493 | 503 |
| 494 visitThrow(cps_ir.Throw exp) { | 504 visitThrow(cps_ir.Throw exp) { |
| 495 } | 505 } |
| 496 | 506 |
| 497 visitRethrow(cps_ir.Rethrow exp) { | 507 visitRethrow(cps_ir.Rethrow exp) { |
| 498 } | 508 } |
| 499 | 509 |
| 510 visitUnreachable(cps_ir.Unreachable node) { |
| 511 } |
| 512 |
| 500 visitSetMutableVariable(cps_ir.SetMutableVariable exp) { | 513 visitSetMutableVariable(cps_ir.SetMutableVariable exp) { |
| 501 visit(exp.body); | 514 visit(exp.body); |
| 502 } | 515 } |
| 503 | 516 |
| 504 visitSetField(cps_ir.SetField exp) { | 517 visitSetField(cps_ir.SetField exp) { |
| 505 visit(exp.body); | 518 visit(exp.body); |
| 506 } | 519 } |
| 507 | 520 |
| 508 visitSetStatic(cps_ir.SetStatic exp) { | 521 visitSetStatic(cps_ir.SetStatic exp) { |
| 509 visit(exp.body); | 522 visit(exp.body); |
| 510 } | 523 } |
| 511 | 524 |
| 512 visitGetLazyStatic(cps_ir.GetLazyStatic exp) { | 525 visitGetLazyStatic(cps_ir.GetLazyStatic exp) { |
| 513 addEdgeToContinuation(exp.continuation); | 526 addEdgeToContinuation(exp.continuation); |
| 514 } | 527 } |
| 515 | 528 |
| 516 visitBranch(cps_ir.Branch exp) { | 529 visitBranch(cps_ir.Branch exp) { |
| 517 cps_ir.Continuation trueTarget = exp.trueContinuation.definition; | 530 cps_ir.Continuation trueTarget = exp.trueContinuation.definition; |
| 518 if (!trueTarget.isReturnContinuation) { | 531 if (!trueTarget.isReturnContinuation) { |
| 519 currentBlock.addEdgeTo(getBlock(trueTarget)); | 532 currentBlock.addEdgeTo(getBlock(trueTarget)); |
| 520 } | 533 } |
| 521 cps_ir.Continuation falseTarget = exp.falseContinuation.definition; | 534 cps_ir.Continuation falseTarget = exp.falseContinuation.definition; |
| 522 if (!falseTarget.isReturnContinuation) { | 535 if (!falseTarget.isReturnContinuation) { |
| 523 currentBlock.addEdgeTo(getBlock(falseTarget)); | 536 currentBlock.addEdgeTo(getBlock(falseTarget)); |
| 524 } | 537 } |
| 525 } | 538 } |
| 526 | 539 |
| 527 visitTypeOperator(cps_ir.TypeOperator exp) { | 540 visitTypeCast(cps_ir.TypeCast exp) { |
| 528 addEdgeToContinuation(exp.continuation); | 541 addEdgeToContinuation(exp.continuation); |
| 529 } | 542 } |
| 530 | 543 |
| 531 visitContinuation(cps_ir.Continuation c) { | 544 visitContinuation(cps_ir.Continuation c) { |
| 532 var old_node = currentBlock; | 545 var old_node = currentBlock; |
| 533 currentBlock = getBlock(c); | 546 currentBlock = getBlock(c); |
| 534 visit(c.body); | 547 visit(c.body); |
| 535 currentBlock = old_node; | 548 currentBlock = old_node; |
| 536 } | 549 } |
| 537 | 550 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 unexpectedNode(node); | 609 unexpectedNode(node); |
| 597 } | 610 } |
| 598 | 611 |
| 599 visitNonTailThrow(cps_ir.NonTailThrow node) { | 612 visitNonTailThrow(cps_ir.NonTailThrow node) { |
| 600 unexpectedNode(node); | 613 unexpectedNode(node); |
| 601 } | 614 } |
| 602 | 615 |
| 603 visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) { | 616 visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) { |
| 604 unexpectedNode(node); | 617 unexpectedNode(node); |
| 605 } | 618 } |
| 619 |
| 620 visitTypeTest(cps_ir.TypeTest node) { |
| 621 unexpectedNode(node); |
| 622 } |
| 606 } | 623 } |
| OLD | NEW |