| 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 simple_types_inferrer; | 5 library simple_types_inferrer; |
| 6 | 6 |
| 7 import '../closure.dart' show ClosureClassMap; | 7 import '../closure.dart' show ClosureClassMap; |
| 8 import '../common.dart'; | 8 import '../common.dart'; |
| 9 import '../common/names.dart' show Identifiers, Selectors; | 9 import '../common/names.dart' show Identifiers, Selectors; |
| 10 import '../compiler.dart' show Compiler; | 10 import '../compiler.dart' show Compiler; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 ? locals.fieldScope.isThisExposed | 124 ? locals.fieldScope.isThisExposed |
| 125 : true; | 125 : true; |
| 126 } | 126 } |
| 127 | 127 |
| 128 void set isThisExposed(value) { | 128 void set isThisExposed(value) { |
| 129 if (analyzedElement.isGenerativeConstructor) { | 129 if (analyzedElement.isGenerativeConstructor) { |
| 130 locals.fieldScope.isThisExposed = value; | 130 locals.fieldScope.isThisExposed = value; |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 | 133 |
| 134 void initializationIsIndefinite() { |
| 135 if (analyzedElement.isGenerativeConstructor) { |
| 136 locals.fieldScope.isIndefinite = true; |
| 137 } |
| 138 } |
| 139 |
| 134 DiagnosticReporter get reporter => compiler.reporter; | 140 DiagnosticReporter get reporter => compiler.reporter; |
| 135 | 141 |
| 136 ClosedWorld get closedWorld => inferrer.closedWorld; | 142 ClosedWorld get closedWorld => inferrer.closedWorld; |
| 137 | 143 |
| 138 @override | 144 @override |
| 139 SemanticSendVisitor get sendVisitor => this; | 145 SemanticSendVisitor get sendVisitor => this; |
| 140 | 146 |
| 141 @override | 147 @override |
| 142 TypeInformation apply(ast.Node node, _) => visit(node); | 148 TypeInformation apply(ast.Node node, _) => visit(node); |
| 143 | 149 |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 handleCondition(node.condition, tests); | 709 handleCondition(node.condition, tests); |
| 704 updateIsChecks(tests, usePositive: true); | 710 updateIsChecks(tests, usePositive: true); |
| 705 visit(node.body); | 711 visit(node.body); |
| 706 visit(node.update); | 712 visit(node.update); |
| 707 }); | 713 }); |
| 708 } | 714 } |
| 709 | 715 |
| 710 TypeInformation visitTryStatement(ast.TryStatement node) { | 716 TypeInformation visitTryStatement(ast.TryStatement node) { |
| 711 LocalsHandler saved = locals; | 717 LocalsHandler saved = locals; |
| 712 locals = new LocalsHandler.from(locals, node, useOtherTryBlock: false); | 718 locals = new LocalsHandler.from(locals, node, useOtherTryBlock: false); |
| 719 initializationIsIndefinite(); |
| 713 visit(node.tryBlock); | 720 visit(node.tryBlock); |
| 714 saved.mergeDiamondFlow(locals, null); | 721 saved.mergeDiamondFlow(locals, null); |
| 715 locals = saved; | 722 locals = saved; |
| 716 for (ast.Node catchBlock in node.catchBlocks) { | 723 for (ast.Node catchBlock in node.catchBlocks) { |
| 717 saved = locals; | 724 saved = locals; |
| 718 locals = new LocalsHandler.from(locals, catchBlock); | 725 locals = new LocalsHandler.from(locals, catchBlock); |
| 719 visit(catchBlock); | 726 visit(catchBlock); |
| 720 saved.mergeDiamondFlow(locals, null); | 727 saved.mergeDiamondFlow(locals, null); |
| 721 locals = saved; | 728 locals = saved; |
| 722 } | 729 } |
| (...skipping 2133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2856 } | 2863 } |
| 2857 locals.seenReturnOrThrow = true; | 2864 locals.seenReturnOrThrow = true; |
| 2858 return null; | 2865 return null; |
| 2859 } | 2866 } |
| 2860 | 2867 |
| 2861 TypeInformation visitReturn(ast.Return node) { | 2868 TypeInformation visitReturn(ast.Return node) { |
| 2862 ast.Node expression = node.expression; | 2869 ast.Node expression = node.expression; |
| 2863 recordReturnType( | 2870 recordReturnType( |
| 2864 expression == null ? types.nullType : expression.accept(this)); | 2871 expression == null ? types.nullType : expression.accept(this)); |
| 2865 locals.seenReturnOrThrow = true; | 2872 locals.seenReturnOrThrow = true; |
| 2873 initializationIsIndefinite(); |
| 2866 return null; | 2874 return null; |
| 2867 } | 2875 } |
| 2868 | 2876 |
| 2869 TypeInformation handleForInLoop( | 2877 TypeInformation handleForInLoop( |
| 2870 ast.ForIn node, | 2878 ast.ForIn node, |
| 2871 TypeInformation iteratorType, | 2879 TypeInformation iteratorType, |
| 2872 Selector currentSelector, | 2880 Selector currentSelector, |
| 2873 TypeMask currentMask, | 2881 TypeMask currentMask, |
| 2874 Selector moveNextSelector, | 2882 Selector moveNextSelector, |
| 2875 TypeMask moveNextMask) { | 2883 TypeMask moveNextMask) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2931 Selector moveNextSelector = Selectors.moveNext; | 2939 Selector moveNextSelector = Selectors.moveNext; |
| 2932 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); | 2940 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); |
| 2933 | 2941 |
| 2934 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, | 2942 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, |
| 2935 iteratorMask, expressionType, new ArgumentsTypes.empty()); | 2943 iteratorMask, expressionType, new ArgumentsTypes.empty()); |
| 2936 | 2944 |
| 2937 return handleForInLoop(node, iteratorType, currentSelector, currentMask, | 2945 return handleForInLoop(node, iteratorType, currentSelector, currentMask, |
| 2938 moveNextSelector, moveNextMask); | 2946 moveNextSelector, moveNextMask); |
| 2939 } | 2947 } |
| 2940 } | 2948 } |
| OLD | NEW |