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/inferrer_engine.dart

Issue 2981613002: Parameterize TypeSystem by its node kind (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/names.dart'; 8 import '../common/names.dart';
9 import '../compiler.dart'; 9 import '../compiler.dart';
10 import '../constants/expressions.dart'; 10 import '../constants/expressions.dart';
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 int overallRefineCount = 0; 57 int overallRefineCount = 0;
58 int addedInGraph = 0; 58 int addedInGraph = 0;
59 59
60 final Compiler compiler; 60 final Compiler compiler;
61 61
62 /// The [ClosedWorld] on which inference reasoning is based. 62 /// The [ClosedWorld] on which inference reasoning is based.
63 final ClosedWorld closedWorld; 63 final ClosedWorld closedWorld;
64 64
65 final ClosedWorldRefiner closedWorldRefiner; 65 final ClosedWorldRefiner closedWorldRefiner;
66 final TypeSystem types; 66 final TypeSystem<ast.Node> types;
67 final Map<ast.Node, TypeInformation> concreteTypes = 67 final Map<ast.Node, TypeInformation> concreteTypes =
68 new Map<ast.Node, TypeInformation>(); 68 new Map<ast.Node, TypeInformation>();
69 69
70 /// Parallel structure for concreteTypes. 70 /// Parallel structure for concreteTypes.
71 // TODO(efortuna): Remove concreteTypes and/or parameterize InferrerEngine by 71 // TODO(efortuna): Remove concreteTypes and/or parameterize InferrerEngine by
72 // ir.Node or ast.Node type. Then remove this in favor of `concreteTypes`. 72 // ir.Node or ast.Node type. Then remove this in favor of `concreteTypes`.
73 final Map<ir.Node, TypeInformation> concreteKernelTypes = 73 final Map<ir.Node, TypeInformation> concreteKernelTypes =
74 new Map<ir.Node, TypeInformation>(); 74 new Map<ir.Node, TypeInformation>();
75 final Set<ConstructorElement> generativeConstructorsExposingThis = 75 final Set<ConstructorElement> generativeConstructorsExposingThis =
76 new Set<ConstructorElement>(); 76 new Set<ConstructorElement>();
77 77
78 /// Data computed internally within elements, like the type-mask of a send a 78 /// Data computed internally within elements, like the type-mask of a send a
79 /// list allocation, or a for-in loop. 79 /// list allocation, or a for-in loop.
80 final Map<MemberElement, GlobalTypeInferenceElementData> _memberData = 80 final Map<MemberElement, GlobalTypeInferenceElementData> _memberData =
81 new Map<MemberElement, GlobalTypeInferenceElementData>(); 81 new Map<MemberElement, GlobalTypeInferenceElementData>();
82 82
83 InferrerEngine(this.compiler, ClosedWorld closedWorld, 83 InferrerEngine(this.compiler, ClosedWorld closedWorld,
84 this.closedWorldRefiner, this.mainElement) 84 this.closedWorldRefiner, this.mainElement)
85 : this.types = new TypeSystem(closedWorld), 85 : this.types = new TypeSystem<ast.Node>(closedWorld),
86 this.closedWorld = closedWorld; 86 this.closedWorld = closedWorld;
87 87
88 CommonElements get commonElements => closedWorld.commonElements; 88 CommonElements get commonElements => closedWorld.commonElements;
89 89
90 /** 90 /**
91 * Applies [f] to all elements in the universe that match 91 * Applies [f] to all elements in the universe that match
92 * [selector] and [mask]. If [f] returns false, aborts the iteration. 92 * [selector] and [mask]. If [f] returns false, aborts the iteration.
93 */ 93 */
94 void forEachElementMatching( 94 void forEachElementMatching(
95 Selector selector, TypeMask mask, bool f(Element element)) { 95 Selector selector, TypeMask mask, bool f(Element element)) {
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 types.allocatedCalls.add(info); 940 types.allocatedCalls.add(info);
941 return info; 941 return info;
942 } 942 }
943 943
944 /** 944 /**
945 * Registers a call to await with an expression of type [argumentType] as 945 * Registers a call to await with an expression of type [argumentType] as
946 * argument. 946 * argument.
947 */ 947 */
948 TypeInformation registerAwait(ast.Node node, TypeInformation argument) { 948 TypeInformation registerAwait(ast.Node node, TypeInformation argument) {
949 AwaitTypeInformation info = 949 AwaitTypeInformation info =
950 new AwaitTypeInformation(types.currentMember, node); 950 new AwaitTypeInformation<ast.Node>(types.currentMember, node);
951 info.addAssignment(argument); 951 info.addAssignment(argument);
952 types.allocatedTypes.add(info); 952 types.allocatedTypes.add(info);
953 return info; 953 return info;
954 } 954 }
955 955
956 /** 956 /**
957 * Registers a call to yield with an expression of type [argumentType] as 957 * Registers a call to yield with an expression of type [argumentType] as
958 * argument. 958 * argument.
959 */ 959 */
960 TypeInformation registerYield(ast.Node node, TypeInformation argument) { 960 TypeInformation registerYield(ast.Node node, TypeInformation argument) {
961 YieldTypeInformation info = 961 YieldTypeInformation info =
962 new YieldTypeInformation(types.currentMember, node); 962 new YieldTypeInformation<ast.Node>(types.currentMember, node);
963 info.addAssignment(argument); 963 info.addAssignment(argument);
964 types.allocatedTypes.add(info); 964 types.allocatedTypes.add(info);
965 return info; 965 return info;
966 } 966 }
967 967
968 /** 968 /**
969 * Registers that [caller] calls [closure] with [arguments]. 969 * Registers that [caller] calls [closure] with [arguments].
970 * 970 *
971 * [sideEffects] will be updated to incorporate the potential 971 * [sideEffects] will be updated to incorporate the potential
972 * callees' side effects. 972 * callees' side effects.
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 /** 1116 /**
1117 * Records that the captured variable [local] is read. 1117 * Records that the captured variable [local] is read.
1118 */ 1118 */
1119 void recordCapturedLocalRead(Local local) {} 1119 void recordCapturedLocalRead(Local local) {}
1120 1120
1121 /** 1121 /**
1122 * Records that the variable [local] is being updated. 1122 * Records that the variable [local] is being updated.
1123 */ 1123 */
1124 void recordLocalUpdate(Local local, TypeInformation type) {} 1124 void recordLocalUpdate(Local local, TypeInformation type) {}
1125 } 1125 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder_kernel.dart ('k') | pkg/compiler/lib/src/inferrer/locals_handler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698