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

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

Issue 2991313002: Split ast based parts from InferrerEngineImpl (Closed)
Patch Set: Created 3 years, 4 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 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;
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 throw new UnsupportedError('ParameterTypeInformation.getInferredSignature'); 824 throw new UnsupportedError('ParameterTypeInformation.getInferredSignature');
825 } 825 }
826 } 826 }
827 827
828 enum CallType { 828 enum CallType {
829 access, 829 access,
830 complex, 830 complex,
831 forIn, 831 forIn,
832 } 832 }
833 833
834 bool validCallType(CallType callType, Spannable call) { 834 bool validCallType(CallType callType, Object call) {
835 switch (callType) { 835 switch (callType) {
836 case CallType.complex: 836 case CallType.complex:
837 return call is ast.SendSet; 837 return call is ast.SendSet;
838 case CallType.access: 838 case CallType.access:
839 return call is ast.Send; 839 return call is ast.Send;
840 case CallType.forIn: 840 case CallType.forIn:
841 return call is ast.ForIn; 841 return call is ast.ForIn;
842 } 842 }
843 throw new StateError('Unexpected call type $callType.'); 843 throw new StateError('Unexpected call type $callType.');
844 } 844 }
845 845
846 /** 846 /**
847 * A [CallSiteTypeInformation] is a call found in the AST, or a 847 * A [CallSiteTypeInformation] is a call found in the AST, or a
848 * synthesized call for implicit calls in Dart (such as forwarding 848 * synthesized call for implicit calls in Dart (such as forwarding
849 * factories). The [_call] field is a [ast.Node] for the former, and an 849 * factories). The [_call] field is a [ast.Node] for the former, and an
850 * [Element] for the latter. 850 * [Element] for the latter.
851 * 851 *
852 * In the inferrer graph, [CallSiteTypeInformation] nodes do not have 852 * In the inferrer graph, [CallSiteTypeInformation] nodes do not have
853 * any assignment. They rely on the [caller] field for static calls, 853 * any assignment. They rely on the [caller] field for static calls,
854 * and [selector] and [receiver] fields for dynamic calls. 854 * and [selector] and [receiver] fields for dynamic calls.
855 */ 855 */
856 abstract class CallSiteTypeInformation extends TypeInformation 856 abstract class CallSiteTypeInformation extends TypeInformation
857 with ApplyableTypeInformation { 857 with ApplyableTypeInformation {
858 final Spannable _call; 858 final Object _call;
859 final MemberEntity caller; 859 final MemberEntity caller;
860 final Selector selector; 860 final Selector selector;
861 final TypeMask mask; 861 final TypeMask mask;
862 final ArgumentsTypes arguments; 862 final ArgumentsTypes arguments;
863 final bool inLoop; 863 final bool inLoop;
864 864
865 CallSiteTypeInformation(MemberTypeInformation context, this._call, 865 CallSiteTypeInformation(MemberTypeInformation context, this._call,
866 this.caller, this.selector, this.mask, this.arguments, this.inLoop) 866 this.caller, this.selector, this.mask, this.arguments, this.inLoop)
867 : super.noAssignments(context) { 867 : super.noAssignments(context) {
868 assert(_checkCaller(caller)); 868 assert(_checkCaller(caller));
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 void removeAndClearReferences(InferrerEngine inferrer) { 959 void removeAndClearReferences(InferrerEngine inferrer) {
960 ElementTypeInformation callee = _getCalledTypeInfo(inferrer); 960 ElementTypeInformation callee = _getCalledTypeInfo(inferrer);
961 callee.removeUser(this); 961 callee.removeUser(this);
962 if (arguments != null) { 962 if (arguments != null) {
963 arguments.forEach((info) => info.removeUser(this)); 963 arguments.forEach((info) => info.removeUser(this));
964 } 964 }
965 super.removeAndClearReferences(inferrer); 965 super.removeAndClearReferences(inferrer);
966 } 966 }
967 } 967 }
968 968
969 class DynamicCallSiteTypeInformation extends CallSiteTypeInformation { 969 class DynamicCallSiteTypeInformation<T> extends CallSiteTypeInformation {
970 final CallType _callType; 970 final CallType _callType;
971 final TypeInformation receiver; 971 final TypeInformation receiver;
972 final bool isConditional; 972 final bool isConditional;
973 973
974 /// Cached targets of this call. 974 /// Cached targets of this call.
975 Iterable<MemberEntity> targets; 975 Iterable<MemberEntity> targets;
976 976
977 DynamicCallSiteTypeInformation( 977 DynamicCallSiteTypeInformation(
978 MemberTypeInformation context, 978 MemberTypeInformation context,
979 this._callType, 979 this._callType,
980 ast.Node call, 980 T call,
981 MemberEntity enclosing, 981 MemberEntity enclosing,
982 Selector selector, 982 Selector selector,
983 TypeMask mask, 983 TypeMask mask,
984 this.receiver, 984 this.receiver,
985 ArgumentsTypes arguments, 985 ArgumentsTypes arguments,
986 bool inLoop, 986 bool inLoop,
987 this.isConditional) 987 this.isConditional)
988 : super(context, call, enclosing, selector, mask, arguments, inLoop) { 988 : super(context, call, enclosing, selector, mask, arguments, inLoop) {
989 assert(validCallType(_callType, _call)); 989 assert(validCallType(_callType, _call));
990 } 990 }
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1289 (arguments == null || arguments.every((info) => info.isStable)) && 1289 (arguments == null || arguments.every((info) => info.isStable)) &&
1290 super.hasStableType(inferrer); 1290 super.hasStableType(inferrer);
1291 } 1291 }
1292 } 1292 }
1293 1293
1294 class ClosureCallSiteTypeInformation extends CallSiteTypeInformation { 1294 class ClosureCallSiteTypeInformation extends CallSiteTypeInformation {
1295 final TypeInformation closure; 1295 final TypeInformation closure;
1296 1296
1297 ClosureCallSiteTypeInformation( 1297 ClosureCallSiteTypeInformation(
1298 MemberTypeInformation context, 1298 MemberTypeInformation context,
1299 Spannable call, 1299 Object call,
1300 MemberEntity enclosing, 1300 MemberEntity enclosing,
1301 Selector selector, 1301 Selector selector,
1302 TypeMask mask, 1302 TypeMask mask,
1303 this.closure, 1303 this.closure,
1304 ArgumentsTypes arguments, 1304 ArgumentsTypes arguments,
1305 bool inLoop) 1305 bool inLoop)
1306 : super(context, call, enclosing, selector, mask, arguments, inLoop); 1306 : super(context, call, enclosing, selector, mask, arguments, inLoop);
1307 1307
1308 void addToGraph(InferrerEngine inferrer) { 1308 void addToGraph(InferrerEngine inferrer) {
1309 arguments.forEach((info) => info.addUser(this)); 1309 arguments.forEach((info) => info.addUser(this));
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
1941 otherType = closedWorld.commonMasks.functionType; 1941 otherType = closedWorld.commonMasks.functionType;
1942 } else { 1942 } else {
1943 assert(annotation.isTypeVariable); 1943 assert(annotation.isTypeVariable);
1944 // TODO(ngeoffray): Narrow to bound. 1944 // TODO(ngeoffray): Narrow to bound.
1945 return type; 1945 return type;
1946 } 1946 }
1947 if (isNullable) otherType = otherType.nullable(); 1947 if (isNullable) otherType = otherType.nullable();
1948 if (type == null) return otherType; 1948 if (type == null) return otherType;
1949 return type.intersection(otherType, closedWorld); 1949 return type.intersection(otherType, closedWorld);
1950 } 1950 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart ('k') | pkg/compiler/lib/src/types/types.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698