Index: pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
index bcf09683b88188eb9cd796c250bc132d3264e51d..a244edab913613caab31e8e6968ae3bc084ac137 100644 |
--- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
+++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
@@ -533,9 +533,14 @@ class CodeGenerator extends tree_ir.StatementVisitor |
@override |
void visitExpressionStatement(tree_ir.ExpressionStatement node) { |
- accumulator.add(new js.ExpressionStatement( |
- visitExpression(node.expression))); |
- visitStatement(node.next); |
+ js.Expression exp = visitExpression(node.expression); |
+ if (node.next is tree_ir.Unreachable) { |
sra1
2015/11/30 18:59:40
Can we tell if the unreachable code is not conditi
asgerf
2015/12/01 12:40:20
The easy fix was to look at the fallthrough stack,
|
+ // Emit as 'return exp' to assist local analysis in the VM. |
+ accumulator.add(new js.Return(exp)); |
+ } else { |
+ accumulator.add(new js.ExpressionStatement(exp)); |
+ visitStatement(node.next); |
+ } |
} |
@override |
@@ -682,8 +687,8 @@ class CodeGenerator extends tree_ir.StatementVisitor |
@override |
void visitUnreachable(tree_ir.Unreachable node) { |
- // Output nothing. |
- // TODO(asgerf): Emit a throw/return to assist local analysis in the VM? |
+ // Emit a return to assist local analysis in the VM. |
+ accumulator.add(new js.Return()); |
} |
@override |