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

Side by Side Diff: pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart

Issue 1507313006: dart2js cps: Add instruction for null checks. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fix true/false misdocumentation about condition and do not emit call Created 5 years 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
OLDNEW
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; 8 import 'cps_ir_nodes.dart' as cps_ir;
9 import '../tracer.dart'; 9 import '../tracer.dart';
10 10
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 return '$name $value'; 235 return '$name $value';
236 } 236 }
237 237
238 visitSetMutable(cps_ir.SetMutable node) { 238 visitSetMutable(cps_ir.SetMutable node) {
239 String variable = names.name(node.variable.definition); 239 String variable = names.name(node.variable.definition);
240 String value = formatReference(node.value); 240 String value = formatReference(node.value);
241 return 'SetMutable $variable := $value'; 241 return 'SetMutable $variable := $value';
242 } 242 }
243 243
244 String formatReference(cps_ir.Reference ref) { 244 String formatReference(cps_ir.Reference ref) {
245 if (ref == null) return 'null';
245 cps_ir.Definition target = ref.definition; 246 cps_ir.Definition target = ref.definition;
246 if (target is cps_ir.Continuation && target.isReturnContinuation) { 247 if (target is cps_ir.Continuation && target.isReturnContinuation) {
247 return "return"; // Do not generate a name for the return continuation 248 return "return"; // Do not generate a name for the return continuation
248 } else { 249 } else {
249 return names.name(ref.definition); 250 return names.name(ref.definition);
250 } 251 }
251 } 252 }
252 253
253 visitConstant(cps_ir.Constant node) { 254 visitConstant(cps_ir.Constant node) {
254 return "Constant ${node.value.toStructuredString()}"; 255 return "Constant ${node.value.toStructuredString()}";
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 String object = formatReference(node.object); 383 String object = formatReference(node.object);
383 String index = formatReference(node.index); 384 String index = formatReference(node.index);
384 String value = formatReference(node.value); 385 String value = formatReference(node.value);
385 return 'SetIndex $object $index $value'; 386 return 'SetIndex $object $index $value';
386 } 387 }
387 388
388 visitRefinement(cps_ir.Refinement node) { 389 visitRefinement(cps_ir.Refinement node) {
389 String value = formatReference(node.value); 390 String value = formatReference(node.value);
390 return 'Refinement $value ${node.refineType}'; 391 return 'Refinement $value ${node.refineType}';
391 } 392 }
393
394 visitNullCheck(cps_ir.NullCheck node) {
395 String value = formatReference(node.value);
396 String condition = formatReference(node.condition);
397 return 'NullCheck $value condition:$condition selector:${node.selector}';
398 }
392 } 399 }
393 400
394 /** 401 /**
395 * Invents (and remembers) names for Continuations, Parameters, etc. 402 * Invents (and remembers) names for Continuations, Parameters, etc.
396 * The names must match the conventions used by IR Hydra, e.g. 403 * The names must match the conventions used by IR Hydra, e.g.
397 * Continuations and Functions must have names of form B### since they 404 * Continuations and Functions must have names of form B### since they
398 * are visualized as basic blocks. 405 * are visualized as basic blocks.
399 */ 406 */
400 class Names { 407 class Names {
401 final Map<Object, String> names = {}; 408 final Map<Object, String> names = {};
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 unexpectedNode(node); 671 unexpectedNode(node);
665 } 672 }
666 673
667 visitYield(cps_ir.Yield node) { 674 visitYield(cps_ir.Yield node) {
668 unexpectedNode(node); 675 unexpectedNode(node);
669 } 676 }
670 677
671 visitRefinement(cps_ir.Refinement node) { 678 visitRefinement(cps_ir.Refinement node) {
672 unexpectedNode(node); 679 unexpectedNode(node);
673 } 680 }
681
682 visitNullCheck(cps_ir.NullCheck node) {
683 unexpectedNode(node);
684 }
674 } 685 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart ('k') | pkg/compiler/lib/src/cps_ir/type_propagation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698