| Index: pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| index a44ea376a478b666944a3f7bd1aec3ab81e01edc..dc58408e7dae17b779b2c74a876d2f29f6ea61f9 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| @@ -7,6 +7,7 @@ import 'package:kernel/ast.dart' as ir;
|
| import '../common/codegen.dart' show CodegenWorkItem;
|
| import '../common/tasks.dart' show CompilerTask;
|
| import '../compiler.dart';
|
| +import '../diagnostics/spannable.dart';
|
| import '../elements/elements.dart';
|
| import '../io/source_information.dart';
|
| import '../js_backend/backend.dart' show JavaScriptBackend;
|
| @@ -116,4 +117,46 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
| if (!isAborted()) closeAndGotoExit(new HGoto());
|
| graph.finalize();
|
| }
|
| +
|
| + @override
|
| + void visitBlock(ir.Block block) {
|
| + assert(!isAborted());
|
| + for (ir.Statement statement in block.statements) {
|
| + statement.accept(this);
|
| + if (!isReachable) {
|
| + // The block has been aborted by a return or a throw.
|
| + if (stack.isNotEmpty) {
|
| + compiler.reporter.internalError(
|
| + NO_LOCATION_SPANNABLE, 'Non-empty instruction stack.');
|
| + }
|
| + return;
|
| + }
|
| + }
|
| + assert(!current.isClosed());
|
| + if (stack.isNotEmpty) {
|
| + compiler.reporter
|
| + .internalError(NO_LOCATION_SPANNABLE, 'Non-empty instruction stack');
|
| + }
|
| + }
|
| +
|
| + @override
|
| + void visitReturnStatement(ir.ReturnStatement returnStatement) {
|
| + HInstruction value;
|
| + if (returnStatement.expression == null) {
|
| + value = graph.addConstantNull(compiler);
|
| + } else {
|
| + returnStatement.expression.accept(this);
|
| + value = pop();
|
| + // TODO(het): Check or trust the type of value
|
| + }
|
| + // TODO(het): Add source information
|
| + // TODO(het): Set a return value instead of closing the function when we
|
| + // support inlining.
|
| + closeAndGotoExit(new HReturn(value, null));
|
| + }
|
| +
|
| + @override
|
| + void visitIntLiteral(ir.IntLiteral intLiteral) {
|
| + stack.add(graph.addConstantInt(intLiteral.value, compiler));
|
| + }
|
| }
|
|
|