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 2473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2503 ast.NodeList arguments, Selector selector, _) { | 2502 ast.NodeList arguments, Selector selector, _) { |
2504 return handleInvalidStaticInvoke(node); | 2503 return handleInvalidStaticInvoke(node); |
2505 } | 2504 } |
2506 | 2505 |
2507 TypeInformation handleForeignSend(ast.Send node, Element element) { | 2506 TypeInformation handleForeignSend(ast.Send node, Element element) { |
2508 ArgumentsTypes arguments = analyzeArguments(node.arguments); | 2507 ArgumentsTypes arguments = analyzeArguments(node.arguments); |
2509 Selector selector = elements.getSelector(node); | 2508 Selector selector = elements.getSelector(node); |
2510 TypeMask mask = inTreeData.typeOfSend(node); | 2509 TypeMask mask = inTreeData.typeOfSend(node); |
2511 String name = element.name; | 2510 String name = element.name; |
2512 handleStaticSend(node, selector, mask, element, arguments); | 2511 handleStaticSend(node, selector, mask, element, arguments); |
2513 if (name == BackendHelpers.JS || | 2512 if (name == JavaScriptBackend.JS || |
2514 name == BackendHelpers.JS_EMBEDDED_GLOBAL || | 2513 name == JavaScriptBackend.JS_EMBEDDED_GLOBAL || |
2515 name == BackendHelpers.JS_BUILTIN) { | 2514 name == JavaScriptBackend.JS_BUILTIN) { |
2516 native.NativeBehavior nativeBehavior = elements.getNativeData(node); | 2515 native.NativeBehavior nativeBehavior = elements.getNativeData(node); |
2517 sideEffects.add(nativeBehavior.sideEffects); | 2516 sideEffects.add(nativeBehavior.sideEffects); |
2518 return inferrer.typeOfNativeBehavior(nativeBehavior); | 2517 return inferrer.typeOfNativeBehavior(nativeBehavior); |
2519 } else if (name == 'JS_OPERATOR_AS_PREFIX' || name == 'JS_STRING_CONCAT') { | 2518 } else if (name == 'JS_OPERATOR_AS_PREFIX' || name == 'JS_STRING_CONCAT') { |
2520 return types.stringType; | 2519 return types.stringType; |
2521 } else { | 2520 } else { |
2522 sideEffects.setAllSideEffects(); | 2521 sideEffects.setAllSideEffects(); |
2523 return types.dynamicType; | 2522 return types.dynamicType; |
2524 } | 2523 } |
2525 } | 2524 } |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2912 } | 2911 } |
2913 | 2912 |
2914 TypeInformation visitAsyncForIn(ast.AsyncForIn node) { | 2913 TypeInformation visitAsyncForIn(ast.AsyncForIn node) { |
2915 TypeInformation expressionType = visit(node.expression); | 2914 TypeInformation expressionType = visit(node.expression); |
2916 | 2915 |
2917 Selector currentSelector = Selectors.current; | 2916 Selector currentSelector = Selectors.current; |
2918 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); | 2917 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); |
2919 Selector moveNextSelector = Selectors.moveNext; | 2918 Selector moveNextSelector = Selectors.moveNext; |
2920 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); | 2919 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); |
2921 | 2920 |
2922 js.JavaScriptBackend backend = compiler.backend; | 2921 ConstructorElement ctor = compiler.commonElements.streamIteratorConstructor; |
2923 ConstructorElement ctor = backend.helpers.streamIteratorConstructor; | |
2924 | 2922 |
2925 /// Synthesize a call to the [StreamIterator] constructor. | 2923 /// Synthesize a call to the [StreamIterator] constructor. |
2926 TypeInformation iteratorType = handleStaticSend( | 2924 TypeInformation iteratorType = handleStaticSend( |
2927 node, null, null, ctor, new ArgumentsTypes([expressionType], null)); | 2925 node, null, null, ctor, new ArgumentsTypes([expressionType], null)); |
2928 | 2926 |
2929 return handleForInLoop(node, iteratorType, currentSelector, currentMask, | 2927 return handleForInLoop(node, iteratorType, currentSelector, currentMask, |
2930 moveNextSelector, moveNextMask); | 2928 moveNextSelector, moveNextMask); |
2931 } | 2929 } |
2932 | 2930 |
2933 TypeInformation visitSyncForIn(ast.SyncForIn node) { | 2931 TypeInformation visitSyncForIn(ast.SyncForIn node) { |
2934 TypeInformation expressionType = visit(node.expression); | 2932 TypeInformation expressionType = visit(node.expression); |
2935 Selector iteratorSelector = Selectors.iterator; | 2933 Selector iteratorSelector = Selectors.iterator; |
2936 TypeMask iteratorMask = inTreeData.typeOfIterator(node); | 2934 TypeMask iteratorMask = inTreeData.typeOfIterator(node); |
2937 Selector currentSelector = Selectors.current; | 2935 Selector currentSelector = Selectors.current; |
2938 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); | 2936 TypeMask currentMask = inTreeData.typeOfIteratorCurrent(node); |
2939 Selector moveNextSelector = Selectors.moveNext; | 2937 Selector moveNextSelector = Selectors.moveNext; |
2940 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); | 2938 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); |
2941 | 2939 |
2942 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, | 2940 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, |
2943 iteratorMask, expressionType, new ArgumentsTypes.empty()); | 2941 iteratorMask, expressionType, new ArgumentsTypes.empty()); |
2944 | 2942 |
2945 return handleForInLoop(node, iteratorType, currentSelector, currentMask, | 2943 return handleForInLoop(node, iteratorType, currentSelector, currentMask, |
2946 moveNextSelector, moveNextMask); | 2944 moveNextSelector, moveNextMask); |
2947 } | 2945 } |
2948 } | 2946 } |
OLD | NEW |