Chromium Code Reviews| 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..8d59e1e9b6dd07b1a07c40b3af879ef347388312 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,44 @@ 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 |
| + closeAndGotoExit(new HReturn(value, null)); |
|
Siggi Cherem (dart-lang)
2016/08/26 00:57:14
also add TODO that once we add inlining we would s
Harry Terkelsen
2016/08/26 17:29:06
Done.
|
| + } |
| + |
| + @override |
| + void visitIntLiteral(ir.IntLiteral intLiteral) { |
| + stack.add(graph.addConstantInt(intLiteral.value, compiler)); |
| + } |
| } |