| Index: sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart b/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
|
| index 747f072c758dc4b111d3fb68ac8f8195e2b3e6a0..d30d74e22652b67b35b8ebaf98323aee842c9263 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
|
| @@ -462,6 +462,7 @@ abstract class InferrerVisitor<T> extends ResolvedVisitor<T> {
|
| final Map<TargetElement, List<LocalsHandler>> continuesFor =
|
| new Map<TargetElement, List<LocalsHandler<T>>>();
|
| LocalsHandler<T> locals;
|
| + final List<T> cascadeReceiverStack = new List<T>();
|
|
|
| bool accumulateIsChecks = false;
|
| bool conditionIsSimple = false;
|
| @@ -995,14 +996,15 @@ abstract class InferrerVisitor<T> extends ResolvedVisitor<T> {
|
| }
|
|
|
| T visitCascadeReceiver(CascadeReceiver node) {
|
| - // TODO(ngeoffray): Implement.
|
| - node.visitChildren(this);
|
| - return types.dynamicType;
|
| + var type = visit(node.expression);
|
| + cascadeReceiverStack.add(type);
|
| + return type;
|
| }
|
|
|
| T visitCascade(Cascade node) {
|
| - // TODO(ngeoffray): Implement.
|
| - node.visitChildren(this);
|
| - return types.dynamicType;
|
| + // Ignore the result of the cascade send and return the type of the cascade
|
| + // receiver.
|
| + visit(node.expression);
|
| + return cascadeReceiverStack.removeLast();
|
| }
|
| }
|
|
|