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; |
11 import '../constants/constant_system.dart'; | 11 import '../constants/constant_system.dart'; |
12 import '../constants/expressions.dart'; | 12 import '../constants/expressions.dart'; |
13 import '../constants/values.dart' show ConstantValue, IntConstantValue; | 13 import '../constants/values.dart' show ConstantValue, IntConstantValue; |
14 import '../elements/resolution_types.dart' | 14 import '../elements/resolution_types.dart' |
15 show ResolutionDartType, ResolutionInterfaceType; | 15 show ResolutionDartType, ResolutionInterfaceType; |
16 import '../elements/elements.dart'; | 16 import '../elements/elements.dart'; |
17 import '../elements/entities.dart'; | 17 import '../elements/entities.dart'; |
18 import '../js_backend/backend_helpers.dart'; | 18 import '../js_backend/backend.dart' show JavaScriptBackend; |
19 import '../js_backend/js_backend.dart' as js; | |
20 import '../native/native.dart' as native; | 19 import '../native/native.dart' as native; |
21 import '../resolution/operators.dart' as op; | 20 import '../resolution/operators.dart' as op; |
22 import '../resolution/semantic_visitor.dart'; | 21 import '../resolution/semantic_visitor.dart'; |
23 import '../resolution/tree_elements.dart' show TreeElements; | 22 import '../resolution/tree_elements.dart' show TreeElements; |
24 import '../tree/tree.dart' as ast; | 23 import '../tree/tree.dart' as ast; |
25 import '../types/constants.dart' show computeTypeMask; | 24 import '../types/constants.dart' show computeTypeMask; |
26 import '../types/types.dart' show TypeMask, GlobalTypeInferenceElementData; | 25 import '../types/types.dart' show TypeMask, GlobalTypeInferenceElementData; |
27 import '../universe/call_structure.dart' show CallStructure; | 26 import '../universe/call_structure.dart' show CallStructure; |
28 import '../universe/selector.dart' show Selector; | 27 import '../universe/selector.dart' show Selector; |
29 import '../universe/side_effects.dart' show SideEffects; | 28 import '../universe/side_effects.dart' show SideEffects; |
(...skipping 2474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2504 ast.NodeList arguments, Selector selector, _) { | 2503 ast.NodeList arguments, Selector selector, _) { |
2505 return handleInvalidStaticInvoke(node); | 2504 return handleInvalidStaticInvoke(node); |
2506 } | 2505 } |
2507 | 2506 |
2508 TypeInformation handleForeignSend(ast.Send node, Element element) { | 2507 TypeInformation handleForeignSend(ast.Send node, Element element) { |
2509 ArgumentsTypes arguments = analyzeArguments(node.arguments); | 2508 ArgumentsTypes arguments = analyzeArguments(node.arguments); |
2510 Selector selector = elements.getSelector(node); | 2509 Selector selector = elements.getSelector(node); |
2511 TypeMask mask = inTreeData.typeOfSend(node); | 2510 TypeMask mask = inTreeData.typeOfSend(node); |
2512 String name = element.name; | 2511 String name = element.name; |
2513 handleStaticSend(node, selector, mask, element, arguments); | 2512 handleStaticSend(node, selector, mask, element, arguments); |
2514 if (name == BackendHelpers.JS || | 2513 if (name == JavaScriptBackend.JS || |
2515 name == BackendHelpers.JS_EMBEDDED_GLOBAL || | 2514 name == JavaScriptBackend.JS_EMBEDDED_GLOBAL || |
2516 name == BackendHelpers.JS_BUILTIN) { | 2515 name == JavaScriptBackend.JS_BUILTIN) { |
2517 native.NativeBehavior nativeBehavior = elements.getNativeData(node); | 2516 native.NativeBehavior nativeBehavior = elements.getNativeData(node); |
2518 sideEffects.add(nativeBehavior.sideEffects); | 2517 sideEffects.add(nativeBehavior.sideEffects); |
2519 return inferrer.typeOfNativeBehavior(nativeBehavior); | 2518 return inferrer.typeOfNativeBehavior(nativeBehavior); |
2520 } else if (name == 'JS_OPERATOR_AS_PREFIX' || name == 'JS_STRING_CONCAT') { | 2519 } else if (name == 'JS_OPERATOR_AS_PREFIX' || name == 'JS_STRING_CONCAT') { |
2521 return types.stringType; | 2520 return types.stringType; |
2522 } else { | 2521 } else { |
2523 sideEffects.setAllSideEffects(); | 2522 sideEffects.setAllSideEffects(); |
2524 return types.dynamicType; | 2523 return types.dynamicType; |
2525 } | 2524 } |
2526 } | 2525 } |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2913 } | 2912 } |
2914 | 2913 |
2915 TypeInformation visitAsyncForIn(ast.AsyncForIn node) { | 2914 TypeInformation visitAsyncForIn(ast.AsyncForIn node) { |
2916 TypeInformation expressionType = visit(node.expression); | 2915 TypeInformation expressionType = visit(node.expression); |
2917 | 2916 |
2918 Selector currentSelector = Selectors.current; | 2917 Selector currentSelector = Selectors.current; |
2919 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); | 2918 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); |
2920 Selector moveNextSelector = Selectors.moveNext; | 2919 Selector moveNextSelector = Selectors.moveNext; |
2921 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); | 2920 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); |
2922 | 2921 |
2923 js.JavaScriptBackend backend = compiler.backend; | 2922 ConstructorElement ctor = compiler.commonElements.streamIteratorConstructor; |
2924 ConstructorElement ctor = backend.helpers.streamIteratorConstructor; | |
2925 | 2923 |
2926 /// Synthesize a call to the [StreamIterator] constructor. | 2924 /// Synthesize a call to the [StreamIterator] constructor. |
2927 TypeInformation iteratorType = handleStaticSend( | 2925 TypeInformation iteratorType = handleStaticSend( |
2928 node, null, null, ctor, new ArgumentsTypes([expressionType], null)); | 2926 node, null, null, ctor, new ArgumentsTypes([expressionType], null)); |
2929 | 2927 |
2930 return handleForInLoop(node, iteratorType, currentSelector, currentMask, | 2928 return handleForInLoop(node, iteratorType, currentSelector, currentMask, |
2931 moveNextSelector, moveNextMask); | 2929 moveNextSelector, moveNextMask); |
2932 } | 2930 } |
2933 | 2931 |
2934 TypeInformation visitSyncForIn(ast.SyncForIn node) { | 2932 TypeInformation visitSyncForIn(ast.SyncForIn node) { |
2935 TypeInformation expressionType = visit(node.expression); | 2933 TypeInformation expressionType = visit(node.expression); |
2936 Selector iteratorSelector = Selectors.iterator; | 2934 Selector iteratorSelector = Selectors.iterator; |
2937 TypeMask iteratorMask = inTreeData.typeOfIterator(node); | 2935 TypeMask iteratorMask = inTreeData.typeOfIterator(node); |
2938 Selector currentSelector = Selectors.current; | 2936 Selector currentSelector = Selectors.current; |
2939 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); | 2937 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); |
2940 Selector moveNextSelector = Selectors.moveNext; | 2938 Selector moveNextSelector = Selectors.moveNext; |
2941 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); | 2939 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); |
2942 | 2940 |
2943 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, | 2941 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, |
2944 iteratorMask, expressionType, new ArgumentsTypes.empty()); | 2942 iteratorMask, expressionType, new ArgumentsTypes.empty()); |
2945 | 2943 |
2946 return handleForInLoop(node, iteratorType, currentSelector, currentMask, | 2944 return handleForInLoop(node, iteratorType, currentSelector, currentMask, |
2947 moveNextSelector, moveNextMask); | 2945 moveNextSelector, moveNextMask); |
2948 } | 2946 } |
2949 } | 2947 } |
OLD | NEW |