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

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

Issue 2488353004: Remove Compiler access from ResolutionEnqueuer (Closed)
Patch Set: Updated cf. comments. Created 4 years, 1 month 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
« no previous file with comments | « pkg/compiler/lib/src/enqueue.dart ('k') | pkg/compiler/lib/src/js_backend/backend.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 compiler.src.inferrer.type_graph_nodes; 5 library compiler.src.inferrer.type_graph_nodes;
6 6
7 import 'dart:collection' show IterableBase; 7 import 'dart:collection' show IterableBase;
8 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show Identifiers; 10 import '../common/names.dart' show Identifiers;
11 import '../compiler.dart' show Compiler; 11 import '../compiler.dart' show Compiler;
12 import '../constants/values.dart'; 12 import '../constants/values.dart';
13 import '../dart_types.dart' show DartType, FunctionType, TypeKind; 13 import '../dart_types.dart' show DartType, FunctionType, TypeKind;
14 import '../elements/elements.dart'; 14 import '../elements/elements.dart';
15 import '../js_backend/backend.dart';
15 import '../tree/dartstring.dart' show DartString; 16 import '../tree/dartstring.dart' show DartString;
16 import '../tree/tree.dart' as ast show Node, LiteralBool, Send; 17 import '../tree/tree.dart' as ast show Node, LiteralBool, Send;
17 import '../types/masks.dart' 18 import '../types/masks.dart'
18 show 19 show
19 CommonMasks, 20 CommonMasks,
20 ContainerTypeMask, 21 ContainerTypeMask,
21 DictionaryTypeMask, 22 DictionaryTypeMask,
22 MapTypeMask, 23 MapTypeMask,
23 TypeMask, 24 TypeMask,
24 ValueTypeMask; 25 ValueTypeMask;
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 Compiler compiler = inferrer.compiler; 515 Compiler compiler = inferrer.compiler;
515 if (!compiler.options.trustTypeAnnotations && 516 if (!compiler.options.trustTypeAnnotations &&
516 !compiler.options.enableTypeAssertions && 517 !compiler.options.enableTypeAssertions &&
517 !inferrer.annotations.trustTypeAnnotations(element)) { 518 !inferrer.annotations.trustTypeAnnotations(element)) {
518 return mask; 519 return mask;
519 } 520 }
520 if (element.isGenerativeConstructor || element.isSetter) { 521 if (element.isGenerativeConstructor || element.isSetter) {
521 return mask; 522 return mask;
522 } 523 }
523 if (element.isField) { 524 if (element.isField) {
524 return _narrowType(compiler, mask, element.type); 525 return _narrowType(compiler.closedWorld, mask, element.type);
525 } 526 }
526 assert( 527 assert(
527 element.isFunction || element.isGetter || element.isFactoryConstructor); 528 element.isFunction || element.isGetter || element.isFactoryConstructor);
528 529
529 FunctionType type = element.type; 530 FunctionType type = element.type;
530 return _narrowType(compiler, mask, type.returnType); 531 return _narrowType(compiler.closedWorld, mask, type.returnType);
531 } 532 }
532 533
533 TypeMask computeType(TypeGraphInferrerEngine inferrer) { 534 TypeMask computeType(TypeGraphInferrerEngine inferrer) {
534 TypeMask special = handleSpecialCases(inferrer); 535 TypeMask special = handleSpecialCases(inferrer);
535 if (special != null) return potentiallyNarrowType(special, inferrer); 536 if (special != null) return potentiallyNarrowType(special, inferrer);
536 return potentiallyNarrowType( 537 return potentiallyNarrowType(
537 inferrer.types.computeTypeMask(assignments), inferrer); 538 inferrer.types.computeTypeMask(assignments), inferrer);
538 } 539 }
539 540
540 TypeMask safeType(TypeGraphInferrerEngine inferrer) { 541 TypeMask safeType(TypeGraphInferrerEngine inferrer) {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 TypeMask mask, TypeGraphInferrerEngine inferrer) { 662 TypeMask mask, TypeGraphInferrerEngine inferrer) {
662 Compiler compiler = inferrer.compiler; 663 Compiler compiler = inferrer.compiler;
663 if (!compiler.options.trustTypeAnnotations && 664 if (!compiler.options.trustTypeAnnotations &&
664 !inferrer.annotations.trustTypeAnnotations(declaration)) { 665 !inferrer.annotations.trustTypeAnnotations(declaration)) {
665 return mask; 666 return mask;
666 } 667 }
667 // When type assertions are enabled (aka checked mode), we have to always 668 // When type assertions are enabled (aka checked mode), we have to always
668 // ignore type annotations to ensure that the checks are actually inserted 669 // ignore type annotations to ensure that the checks are actually inserted
669 // into the function body and retained until runtime. 670 // into the function body and retained until runtime.
670 assert(!compiler.options.enableTypeAssertions); 671 assert(!compiler.options.enableTypeAssertions);
671 return _narrowType(compiler, mask, element.type); 672 return _narrowType(compiler.closedWorld, mask, element.type);
672 } 673 }
673 674
674 TypeMask computeType(TypeGraphInferrerEngine inferrer) { 675 TypeMask computeType(TypeGraphInferrerEngine inferrer) {
675 TypeMask special = handleSpecialCases(inferrer); 676 TypeMask special = handleSpecialCases(inferrer);
676 if (special != null) return special; 677 if (special != null) return special;
677 return potentiallyNarrowType( 678 return potentiallyNarrowType(
678 inferrer.types.computeTypeMask(assignments), inferrer); 679 inferrer.types.computeTypeMask(assignments), inferrer);
679 } 680 }
680 681
681 TypeMask safeType(TypeGraphInferrerEngine inferrer) { 682 TypeMask safeType(TypeGraphInferrerEngine inferrer) {
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 return null; 964 return null;
964 } 965 }
965 } 966 }
966 967
967 TypeMask computeType(TypeGraphInferrerEngine inferrer) { 968 TypeMask computeType(TypeGraphInferrerEngine inferrer) {
968 Iterable<Element> oldTargets = targets; 969 Iterable<Element> oldTargets = targets;
969 TypeMask typeMask = computeTypedSelector(inferrer); 970 TypeMask typeMask = computeTypedSelector(inferrer);
970 inferrer.updateSelectorInTree(caller, call, selector, typeMask); 971 inferrer.updateSelectorInTree(caller, call, selector, typeMask);
971 972
972 Compiler compiler = inferrer.compiler; 973 Compiler compiler = inferrer.compiler;
974 JavaScriptBackend backend = compiler.backend;
973 TypeMask maskToUse = 975 TypeMask maskToUse =
974 compiler.closedWorld.extendMaskIfReachesAll(selector, typeMask); 976 compiler.closedWorld.extendMaskIfReachesAll(selector, typeMask);
975 bool canReachAll = compiler.enabledInvokeOn && (maskToUse != typeMask); 977 bool canReachAll = backend.hasInvokeOnSupport && (maskToUse != typeMask);
976 978
977 // If this call could potentially reach all methods that satisfy 979 // If this call could potentially reach all methods that satisfy
978 // the untyped selector (through noSuchMethod's `Invocation` 980 // the untyped selector (through noSuchMethod's `Invocation`
979 // and a call to `delegate`), we iterate over all these methods to 981 // and a call to `delegate`), we iterate over all these methods to
980 // update their parameter types. 982 // update their parameter types.
981 targets = compiler.closedWorld.allFunctions.filter(selector, maskToUse); 983 targets = compiler.closedWorld.allFunctions.filter(selector, maskToUse);
982 Iterable<Element> typedTargets = canReachAll 984 Iterable<Element> typedTargets = canReachAll
983 ? compiler.closedWorld.allFunctions.filter(selector, typeMask) 985 ? compiler.closedWorld.allFunctions.filter(selector, typeMask)
984 : targets; 986 : targets;
985 987
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 T visitBoolLiteralTypeInformation(BoolLiteralTypeInformation info); 1719 T visitBoolLiteralTypeInformation(BoolLiteralTypeInformation info);
1718 T visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info); 1720 T visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info);
1719 T visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info); 1721 T visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info);
1720 T visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info); 1722 T visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info);
1721 T visitMemberTypeInformation(MemberTypeInformation info); 1723 T visitMemberTypeInformation(MemberTypeInformation info);
1722 T visitParameterTypeInformation(ParameterTypeInformation info); 1724 T visitParameterTypeInformation(ParameterTypeInformation info);
1723 T visitClosureTypeInformation(ClosureTypeInformation info); 1725 T visitClosureTypeInformation(ClosureTypeInformation info);
1724 T visitAwaitTypeInformation(AwaitTypeInformation info); 1726 T visitAwaitTypeInformation(AwaitTypeInformation info);
1725 } 1727 }
1726 1728
1727 TypeMask _narrowType(Compiler compiler, TypeMask type, DartType annotation, 1729 TypeMask _narrowType(
1730 ClosedWorld closedWorld, TypeMask type, DartType annotation,
1728 {bool isNullable: true}) { 1731 {bool isNullable: true}) {
1729 if (annotation.treatAsDynamic) return type; 1732 if (annotation.treatAsDynamic) return type;
1730 if (annotation.isObject) return type; 1733 if (annotation.isObject) return type;
1731 TypeMask otherType; 1734 TypeMask otherType;
1732 if (annotation.isTypedef || annotation.isFunctionType) { 1735 if (annotation.isTypedef || annotation.isFunctionType) {
1733 otherType = compiler.commonMasks.functionType; 1736 otherType = closedWorld.commonMasks.functionType;
1734 } else if (annotation.isTypeVariable) { 1737 } else if (annotation.isTypeVariable) {
1735 // TODO(ngeoffray): Narrow to bound. 1738 // TODO(ngeoffray): Narrow to bound.
1736 return type; 1739 return type;
1737 } else if (annotation.isVoid) { 1740 } else if (annotation.isVoid) {
1738 otherType = compiler.commonMasks.nullType; 1741 otherType = closedWorld.commonMasks.nullType;
1739 } else { 1742 } else {
1740 assert(annotation.isInterfaceType); 1743 assert(annotation.isInterfaceType);
1741 otherType = 1744 otherType = new TypeMask.nonNullSubtype(annotation.element, closedWorld);
1742 new TypeMask.nonNullSubtype(annotation.element, compiler.closedWorld);
1743 } 1745 }
1744 if (isNullable) otherType = otherType.nullable(); 1746 if (isNullable) otherType = otherType.nullable();
1745 if (type == null) return otherType; 1747 if (type == null) return otherType;
1746 return type.intersection(otherType, compiler.closedWorld); 1748 return type.intersection(otherType, closedWorld);
1747 } 1749 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/enqueue.dart ('k') | pkg/compiler/lib/src/js_backend/backend.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698