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

Side by Side Diff: pkg/compiler/lib/src/ssa/builder_kernel.dart

Issue 2380573004: kernel->ssa: implement assert statements (Closed)
Patch Set: remove todo after discussion Created 4 years, 2 months 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 | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/graph_builder.dart » ('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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem; 8 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
9 import '../common/names.dart'; 9 import '../common/names.dart';
10 import '../common/tasks.dart' show CompilerTask; 10 import '../common/tasks.dart' show CompilerTask;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 buildField(target); 101 buildField(target);
102 } else if (target is ir.Constructor) { 102 } else if (target is ir.Constructor) {
103 buildConstructor(target); 103 buildConstructor(target);
104 } 104 }
105 assert(graph.isValid()); 105 assert(graph.isValid());
106 return graph; 106 return graph;
107 } 107 }
108 108
109 void buildField(ir.Field field) { 109 void buildField(ir.Field field) {
110 openFunction(); 110 openFunction();
111 field.initializer.accept(this); 111 if (field.initializer != null) {
112 field.initializer.accept(this);
113 } else {
114 stack.add(graph.addConstantNull(compiler));
115 }
112 HInstruction value = pop(); 116 HInstruction value = pop();
113 closeAndGotoExit(new HReturn(value, null)); 117 closeAndGotoExit(new HReturn(value, null));
114 closeFunction(); 118 closeFunction();
115 } 119 }
116 120
117 @override 121 @override
118 HInstruction popBoolified() { 122 HInstruction popBoolified() {
119 HInstruction value = pop(); 123 HInstruction value = pop();
120 // TODO(het): add boolean conversion type check 124 // TODO(het): add boolean conversion type check
121 HInstruction result = new HBoolify(value, backend.boolType); 125 HInstruction result = new HBoolify(value, backend.boolType);
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 return popBoolified(); 409 return popBoolified();
406 } 410 }
407 411
408 loopHandler.handleLoop(whileStatement, () {}, buildCondition, () {}, () { 412 loopHandler.handleLoop(whileStatement, () {}, buildCondition, () {}, () {
409 whileStatement.body.accept(this); 413 whileStatement.body.accept(this);
410 }); 414 });
411 } 415 }
412 416
413 @override 417 @override
414 void visitIfStatement(ir.IfStatement ifStatement) { 418 void visitIfStatement(ir.IfStatement ifStatement) {
415 SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler); 419 handleIf(
416 brancher.handleIf( 420 visitCondition: () => ifStatement.condition.accept(this),
417 () => ifStatement.condition.accept(this), 421 visitThen: () => ifStatement.then.accept(this),
418 () => ifStatement.then.accept(this), 422 visitElse: () => ifStatement.otherwise?.accept(this));
419 () => ifStatement.otherwise?.accept(this));
420 } 423 }
421 424
422 @override 425 @override
426 void visitAssertStatement(ir.AssertStatement assertStatement) {
427 if (!compiler.options.enableUserAssertions) return;
428 if (assertStatement.message == null) {
429 assertStatement.condition.accept(this);
430 _pushStaticInvocation(astAdapter.assertHelper, <HInstruction>[pop()],
431 astAdapter.assertHelperReturnType);
432 pop();
433 return;
434 }
435
436 // if (assertTest(condition)) assertThrow(message);
437 void buildCondition() {
438 assertStatement.condition.accept(this);
439 _pushStaticInvocation(astAdapter.assertTest, <HInstruction>[pop()],
440 astAdapter.assertTestReturnType);
441 }
442
443 void fail() {
444 assertStatement.message.accept(this);
445 _pushStaticInvocation(astAdapter.assertThrow, <HInstruction>[pop()],
446 astAdapter.assertThrowReturnType);
447 pop();
448 }
449
450 handleIf(visitCondition: buildCondition, visitThen: fail);
451 }
452
453 @override
423 void visitConditionalExpression(ir.ConditionalExpression conditional) { 454 void visitConditionalExpression(ir.ConditionalExpression conditional) {
424 SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler); 455 SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler);
425 brancher.handleConditional( 456 brancher.handleConditional(
426 () => conditional.condition.accept(this), 457 () => conditional.condition.accept(this),
427 () => conditional.then.accept(this), 458 () => conditional.then.accept(this),
428 () => conditional.otherwise.accept(this)); 459 () => conditional.otherwise.accept(this));
429 } 460 }
430 461
431 @override 462 @override
432 void visitLogicalExpression(ir.LogicalExpression logicalExpression) { 463 void visitLogicalExpression(ir.LogicalExpression logicalExpression) {
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 push(new HNot(popBoolified(), backend.boolType)); 817 push(new HNot(popBoolified(), backend.boolType));
787 } 818 }
788 819
789 @override 820 @override
790 void visitStringConcatenation(ir.StringConcatenation stringConcat) { 821 void visitStringConcatenation(ir.StringConcatenation stringConcat) {
791 KernelStringBuilder stringBuilder = new KernelStringBuilder(this); 822 KernelStringBuilder stringBuilder = new KernelStringBuilder(this);
792 stringConcat.accept(stringBuilder); 823 stringConcat.accept(stringBuilder);
793 stack.add(stringBuilder.result); 824 stack.add(stringBuilder.result);
794 } 825 }
795 } 826 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/graph_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698