| 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);
|
| }
|
|
|
|
|