| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library inferrer_visitor; | 5 library inferrer_visitor; |
| 6 | 6 |
| 7 import 'dart:collection' show IterableMixin; | 7 import 'dart:collection' show IterableMixin; |
| 8 | 8 |
| 9 import '../common.dart'; | 9 import '../common.dart'; |
| 10 import '../compiler.dart' show Compiler; | 10 import '../compiler.dart' show Compiler; |
| (...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 698 CompoundBulkMixin<T, dynamic>, | 698 CompoundBulkMixin<T, dynamic>, |
| 699 SetIfNullBulkMixin<T, dynamic>, | 699 SetIfNullBulkMixin<T, dynamic>, |
| 700 PrefixBulkMixin<T, dynamic>, | 700 PrefixBulkMixin<T, dynamic>, |
| 701 PostfixBulkMixin<T, dynamic>, | 701 PostfixBulkMixin<T, dynamic>, |
| 702 ErrorBulkMixin<T, dynamic>, | 702 ErrorBulkMixin<T, dynamic>, |
| 703 NewBulkMixin<T, dynamic>, | 703 NewBulkMixin<T, dynamic>, |
| 704 SetBulkMixin<T, dynamic> | 704 SetBulkMixin<T, dynamic> |
| 705 implements SemanticSendVisitor<T, dynamic> { | 705 implements SemanticSendVisitor<T, dynamic> { |
| 706 final Compiler compiler; | 706 final Compiler compiler; |
| 707 final AstElement analyzedElement; | 707 final AstElement analyzedElement; |
| 708 final ResolvedAst resolvedAst; |
| 708 final TypeSystem<T> types; | 709 final TypeSystem<T> types; |
| 709 final E inferrer; | 710 final E inferrer; |
| 710 final Map<JumpTarget, List<LocalsHandler<T>>> breaksFor = | 711 final Map<JumpTarget, List<LocalsHandler<T>>> breaksFor = |
| 711 new Map<JumpTarget, List<LocalsHandler<T>>>(); | 712 new Map<JumpTarget, List<LocalsHandler<T>>>(); |
| 712 final Map<JumpTarget, List<LocalsHandler>> continuesFor = | 713 final Map<JumpTarget, List<LocalsHandler>> continuesFor = |
| 713 new Map<JumpTarget, List<LocalsHandler<T>>>(); | 714 new Map<JumpTarget, List<LocalsHandler<T>>>(); |
| 714 LocalsHandler<T> locals; | 715 LocalsHandler<T> locals; |
| 715 final List<T> cascadeReceiverStack = new List<T>(); | 716 final List<T> cascadeReceiverStack = new List<T>(); |
| 716 final TreeElements elements; | 717 |
| 718 TreeElements get elements => resolvedAst.elements; |
| 717 | 719 |
| 718 bool accumulateIsChecks = false; | 720 bool accumulateIsChecks = false; |
| 719 bool conditionIsSimple = false; | 721 bool conditionIsSimple = false; |
| 720 List<Send> isChecks; | 722 List<Send> isChecks; |
| 721 int loopLevel = 0; | 723 int loopLevel = 0; |
| 722 | 724 |
| 723 bool get inLoop => loopLevel > 0; | 725 bool get inLoop => loopLevel > 0; |
| 724 bool get isThisExposed { | 726 bool get isThisExposed { |
| 725 return analyzedElement.isGenerativeConstructor | 727 return analyzedElement.isGenerativeConstructor |
| 726 ? locals.fieldScope.isThisExposed | 728 ? locals.fieldScope.isThisExposed |
| 727 : true; | 729 : true; |
| 728 } | 730 } |
| 729 | 731 |
| 730 void set isThisExposed(value) { | 732 void set isThisExposed(value) { |
| 731 if (analyzedElement.isGenerativeConstructor) { | 733 if (analyzedElement.isGenerativeConstructor) { |
| 732 locals.fieldScope.isThisExposed = value; | 734 locals.fieldScope.isThisExposed = value; |
| 733 } | 735 } |
| 734 } | 736 } |
| 735 | 737 |
| 736 InferrerVisitor( | 738 InferrerVisitor(AstElement analyzedElement, this.resolvedAst, this.inferrer, |
| 737 AstElement analyzedElement, this.inferrer, this.types, this.compiler, | 739 this.types, this.compiler, |
| 738 [LocalsHandler<T> handler]) | 740 [LocalsHandler<T> handler]) |
| 739 : this.analyzedElement = analyzedElement, | 741 : this.analyzedElement = analyzedElement, |
| 740 this.locals = handler, | 742 this.locals = handler { |
| 741 this.elements = analyzedElement.resolvedAst.elements { | |
| 742 if (handler != null) return; | 743 if (handler != null) return; |
| 743 Node node = analyzedElement.node; | 744 Node node = analyzedElement.node; |
| 744 FieldInitializationScope<T> fieldScope = | 745 FieldInitializationScope<T> fieldScope = |
| 745 analyzedElement.isGenerativeConstructor | 746 analyzedElement.isGenerativeConstructor |
| 746 ? new FieldInitializationScope<T>(types) | 747 ? new FieldInitializationScope<T>(types) |
| 747 : null; | 748 : null; |
| 748 locals = new LocalsHandler<T>(inferrer, types, compiler, node, fieldScope); | 749 locals = new LocalsHandler<T>(inferrer, types, compiler, node, fieldScope); |
| 749 } | 750 } |
| 750 | 751 |
| 751 DiagnosticReporter get reporter => compiler.reporter; | 752 DiagnosticReporter get reporter => compiler.reporter; |
| (...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1483 return type; | 1484 return type; |
| 1484 } | 1485 } |
| 1485 | 1486 |
| 1486 T visitCascade(Cascade node) { | 1487 T visitCascade(Cascade node) { |
| 1487 // Ignore the result of the cascade send and return the type of the cascade | 1488 // Ignore the result of the cascade send and return the type of the cascade |
| 1488 // receiver. | 1489 // receiver. |
| 1489 visit(node.expression); | 1490 visit(node.expression); |
| 1490 return cascadeReceiverStack.removeLast(); | 1491 return cascadeReceiverStack.removeLast(); |
| 1491 } | 1492 } |
| 1492 } | 1493 } |
| OLD | NEW |