| Index: pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| index dc36d80432fe901283e506f7e2d18ec7dd41374b..ceef60f7d0d55da3cad40e76ef36fc4c2a421c3e 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| @@ -445,6 +445,20 @@ class _TypePropagationVisitor<T> extends Visitor {
|
| setReachable(node.body);
|
| }
|
|
|
| + void visitLetHandler(LetHandler node) {
|
| + setReachable(node.body);
|
| + // The handler is assumed to be reachable (we could instead treat it as
|
| + // unreachable unless we find something reachable that might throw in the
|
| + // body --- it's not clear if we want to do that here or in some other
|
| + // pass). The handler parameters are assumed to be unknown.
|
| + //
|
| + // TODO(kmillikin): we should set the type of the exception and stack
|
| + // trace here. The way we do that depends on how we handle 'on T' catch
|
| + // clauses.
|
| + setReachable(node.handler);
|
| + node.handler.parameters.forEach((Parameter p) => setValue(p, nonConst()));
|
| + }
|
| +
|
| void visitLetMutable(LetMutable node) {
|
| setValue(node.variable, getValue(node.value.definition));
|
| setReachable(node.body);
|
|
|