Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: pkg/compiler/lib/src/inferrer/builder.dart

Issue 2814453005: Merge CommonElements and BackendHelpers! (Closed)
Patch Set: merge with head Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698