Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
index aebd19dbd5fa85b098d1f1d28049b93dde0091cc..ec74ea7734ef5f020288fb69e6ce35896cb0962f 100644 |
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
@@ -433,9 +433,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
} |
visitTryStatement(ast.TryStatement node) { |
- // Finally blocks are not yet implemented. |
- if (node.finallyBlock != null) { |
- return giveup(node, 'try/finally'); |
+ // Try/catch/finally is not yet implemented. |
+ if (!node.catchBlocks.isEmpty && node.finallyBlock != null) { |
+ return giveup(node, 'try/catch/finally'); |
} |
List<CatchClauseInfo> catchClauseInfos = <CatchClauseInfo>[]; |
@@ -457,10 +457,13 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
buildCatchBlock: subbuild(catchClause.block))); |
} |
+ SubbuildFunction buildFinallyBlock = |
+ node.finallyBlock == null ? null : subbuild(node.finallyBlock); |
irBuilder.buildTry( |
tryStatementInfo: tryStatements[node], |
buildTryBlock: subbuild(node.tryBlock), |
catchClauseInfos: catchClauseInfos, |
+ buildFinallyBlock: buildFinallyBlock, |
closureClassMap: closureClassMap); |
} |