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

Side by Side Diff: pkg/compiler/lib/src/universe/use.dart

Issue 1859343004: dartfmt pkg/compiler (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 /// This library defined `uses`. A `use` is a single impact of the world, for 5 /// This library defined `uses`. A `use` is a single impact of the world, for
6 /// instance an invocation of a top level function or a call to the `foo()` 6 /// instance an invocation of a top level function or a call to the `foo()`
7 /// method on an unknown class. 7 /// method on an unknown class.
8 library dart2js.universe.use; 8 library dart2js.universe.use;
9 9
10 import '../closure.dart' show 10 import '../closure.dart' show BoxFieldElement;
11 BoxFieldElement;
12 import '../common.dart'; 11 import '../common.dart';
13 import '../dart_types.dart'; 12 import '../dart_types.dart';
14 import '../elements/elements.dart'; 13 import '../elements/elements.dart';
15 import '../world.dart' show 14 import '../world.dart' show ClassWorld;
16 ClassWorld; 15 import '../util/util.dart' show Hashing;
17 import '../util/util.dart' show
18 Hashing;
19 16
20 import 'call_structure.dart' show 17 import 'call_structure.dart' show CallStructure;
21 CallStructure; 18 import 'selector.dart' show Selector;
22 import 'selector.dart' show 19 import 'universe.dart' show ReceiverConstraint;
23 Selector;
24 import 'universe.dart' show
25 ReceiverConstraint;
26 20
27 21 enum DynamicUseKind { INVOKE, GET, SET, }
28 enum DynamicUseKind {
29 INVOKE,
30 GET,
31 SET,
32 }
33 22
34 /// The use of a dynamic property. [selector] defined the name and kind of the 23 /// The use of a dynamic property. [selector] defined the name and kind of the
35 /// property and [mask] defines the known constraint for the object on which 24 /// property and [mask] defines the known constraint for the object on which
36 /// the property is accessed. 25 /// the property is accessed.
37 class DynamicUse { 26 class DynamicUse {
38 final Selector selector; 27 final Selector selector;
39 final ReceiverConstraint mask; 28 final ReceiverConstraint mask;
40 29
41 DynamicUse(this.selector, this.mask); 30 DynamicUse(this.selector, this.mask);
42 31
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 final Element element; 72 final Element element;
84 final StaticUseKind kind; 73 final StaticUseKind kind;
85 final int hashCode; 74 final int hashCode;
86 75
87 StaticUse.internal(Element element, StaticUseKind kind) 76 StaticUse.internal(Element element, StaticUseKind kind)
88 : this.element = element, 77 : this.element = element,
89 this.kind = kind, 78 this.kind = kind,
90 this.hashCode = Hashing.objectHash(element, Hashing.objectHash(kind)) { 79 this.hashCode = Hashing.objectHash(element, Hashing.objectHash(kind)) {
91 assert(invariant(element, element.isDeclaration, 80 assert(invariant(element, element.isDeclaration,
92 message: "Static use element $element must be " 81 message: "Static use element $element must be "
93 "the declaration element.")); 82 "the declaration element."));
94 } 83 }
95 84
96 /// Invocation of a static or top-level [element] with the given 85 /// Invocation of a static or top-level [element] with the given
97 /// [callStructure]. 86 /// [callStructure].
98 factory StaticUse.staticInvoke(MethodElement element, 87 factory StaticUse.staticInvoke(
99 CallStructure callStructure) { 88 MethodElement element, CallStructure callStructure) {
100 // TODO(johnniwinther): Use the [callStructure]. 89 // TODO(johnniwinther): Use the [callStructure].
101 assert(invariant(element, element.isStatic || element.isTopLevel, 90 assert(invariant(element, element.isStatic || element.isTopLevel,
102 message: "Static invoke element $element must be a top-level " 91 message: "Static invoke element $element must be a top-level "
103 "or static method.")); 92 "or static method."));
104 return new StaticUse.internal(element, StaticUseKind.GENERAL); 93 return new StaticUse.internal(element, StaticUseKind.GENERAL);
105 } 94 }
106 95
107 /// Closurization of a static or top-level function [element]. 96 /// Closurization of a static or top-level function [element].
108 factory StaticUse.staticTearOff(MethodElement element) { 97 factory StaticUse.staticTearOff(MethodElement element) {
109 assert(invariant(element, element.isStatic || element.isTopLevel, 98 assert(invariant(element, element.isStatic || element.isTopLevel,
110 message: "Static tear-off element $element must be a top-level " 99 message: "Static tear-off element $element must be a top-level "
111 "or static method.")); 100 "or static method."));
112 return new StaticUse.internal(element, StaticUseKind.STATIC_TEAR_OFF); 101 return new StaticUse.internal(element, StaticUseKind.STATIC_TEAR_OFF);
113 } 102 }
114 103
115 /// Read access of a static or top-level field or getter [element]. 104 /// Read access of a static or top-level field or getter [element].
116 factory StaticUse.staticGet(MemberElement element) { 105 factory StaticUse.staticGet(MemberElement element) {
117 assert(invariant(element, element.isStatic || element.isTopLevel, 106 assert(invariant(element, element.isStatic || element.isTopLevel,
118 message: "Static get element $element must be a top-level " 107 message: "Static get element $element must be a top-level "
119 "or static method.")); 108 "or static method."));
120 assert(invariant(element, element.isField || element.isGetter, 109 assert(invariant(element, element.isField || element.isGetter,
121 message: "Static get element $element must be a field or a getter.")); 110 message: "Static get element $element must be a field or a getter."));
122 return new StaticUse.internal(element, StaticUseKind.GENERAL); 111 return new StaticUse.internal(element, StaticUseKind.GENERAL);
123 } 112 }
124 113
125 /// Write access of a static or top-level field or setter [element]. 114 /// Write access of a static or top-level field or setter [element].
126 factory StaticUse.staticSet(MemberElement element) { 115 factory StaticUse.staticSet(MemberElement element) {
127 assert(invariant(element, element.isStatic || element.isTopLevel, 116 assert(invariant(element, element.isStatic || element.isTopLevel,
128 message: "Static set element $element must be a top-level " 117 message: "Static set element $element must be a top-level "
129 "or static method.")); 118 "or static method."));
130 assert(invariant(element, element.isField || element.isSetter, 119 assert(invariant(element, element.isField || element.isSetter,
131 message: "Static set element $element must be a field or a setter.")); 120 message: "Static set element $element must be a field or a setter."));
132 return new StaticUse.internal(element, StaticUseKind.GENERAL); 121 return new StaticUse.internal(element, StaticUseKind.GENERAL);
133 } 122 }
134 123
135 /// Invocation of the lazy initializer for a static or top-level field 124 /// Invocation of the lazy initializer for a static or top-level field
136 /// [element]. 125 /// [element].
137 factory StaticUse.staticInit(FieldElement element) { 126 factory StaticUse.staticInit(FieldElement element) {
138 assert(invariant(element, element.isStatic || element.isTopLevel, 127 assert(invariant(element, element.isStatic || element.isTopLevel,
139 message: "Static init element $element must be a top-level " 128 message: "Static init element $element must be a top-level "
140 "or static method.")); 129 "or static method."));
141 assert(invariant(element, element.isField, 130 assert(invariant(element, element.isField,
142 message: "Static init element $element must be a field.")); 131 message: "Static init element $element must be a field."));
143 return new StaticUse.internal(element, StaticUseKind.GENERAL); 132 return new StaticUse.internal(element, StaticUseKind.GENERAL);
144 } 133 }
145 134
146 /// Invocation of a super method [element] with the given [callStructure]. 135 /// Invocation of a super method [element] with the given [callStructure].
147 factory StaticUse.superInvoke(MethodElement element, 136 factory StaticUse.superInvoke(
148 CallStructure callStructure) { 137 MethodElement element, CallStructure callStructure) {
149 // TODO(johnniwinther): Use the [callStructure]. 138 // TODO(johnniwinther): Use the [callStructure].
150 assert(invariant(element, element.isInstanceMember, 139 assert(invariant(element, element.isInstanceMember,
151 message: "Super invoke element $element must be an instance method.")); 140 message: "Super invoke element $element must be an instance method."));
152 return new StaticUse.internal(element, StaticUseKind.GENERAL); 141 return new StaticUse.internal(element, StaticUseKind.GENERAL);
153 } 142 }
154 143
155 /// Read access of a super field or getter [element]. 144 /// Read access of a super field or getter [element].
156 factory StaticUse.superGet(MemberElement element) { 145 factory StaticUse.superGet(MemberElement element) {
157 assert(invariant(element, element.isInstanceMember, 146 assert(invariant(element, element.isInstanceMember,
158 message: "Super get element $element must be an instance method.")); 147 message: "Super get element $element must be an instance method."));
(...skipping 22 matching lines...) Expand all
181 170
182 /// Closurization of a super method [element]. 171 /// Closurization of a super method [element].
183 factory StaticUse.superTearOff(MethodElement element) { 172 factory StaticUse.superTearOff(MethodElement element) {
184 assert(invariant(element, element.isInstanceMember && element.isFunction, 173 assert(invariant(element, element.isInstanceMember && element.isFunction,
185 message: "Super invoke element $element must be an instance method.")); 174 message: "Super invoke element $element must be an instance method."));
186 return new StaticUse.internal(element, StaticUseKind.SUPER_TEAR_OFF); 175 return new StaticUse.internal(element, StaticUseKind.SUPER_TEAR_OFF);
187 } 176 }
188 177
189 /// Invocation of a constructor [element] through a this or super 178 /// Invocation of a constructor [element] through a this or super
190 /// constructor call with the given [callStructure]. 179 /// constructor call with the given [callStructure].
191 factory StaticUse.superConstructorInvoke(Element element, 180 factory StaticUse.superConstructorInvoke(
192 CallStructure callStructure) { 181 Element element, CallStructure callStructure) {
193 // TODO(johnniwinther): Use the [callStructure]. 182 // TODO(johnniwinther): Use the [callStructure].
194 assert(invariant(element, 183 assert(invariant(element, element.isGenerativeConstructor,
195 element.isGenerativeConstructor,
196 message: "Constructor invoke element $element must be a " 184 message: "Constructor invoke element $element must be a "
197 "generative constructor.")); 185 "generative constructor."));
198 return new StaticUse.internal(element, StaticUseKind.GENERAL); 186 return new StaticUse.internal(element, StaticUseKind.GENERAL);
199 } 187 }
200 188
201 /// Invocation of a constructor (body) [element] through a this or super 189 /// Invocation of a constructor (body) [element] through a this or super
202 /// constructor call with the given [callStructure]. 190 /// constructor call with the given [callStructure].
203 factory StaticUse.constructorBodyInvoke(ConstructorBodyElement element, 191 factory StaticUse.constructorBodyInvoke(
204 CallStructure callStructure) { 192 ConstructorBodyElement element, CallStructure callStructure) {
205 // TODO(johnniwinther): Use the [callStructure]. 193 // TODO(johnniwinther): Use the [callStructure].
206 return new StaticUse.internal(element, StaticUseKind.GENERAL); 194 return new StaticUse.internal(element, StaticUseKind.GENERAL);
207 } 195 }
208 196
209 /// Constructor invocation of [element] with the given [callStructure]. 197 /// Constructor invocation of [element] with the given [callStructure].
210 factory StaticUse.constructorInvoke(ConstructorElement element, 198 factory StaticUse.constructorInvoke(
211 CallStructure callStructure) { 199 ConstructorElement element, CallStructure callStructure) {
212 // TODO(johnniwinther): Use the [callStructure]. 200 // TODO(johnniwinther): Use the [callStructure].
213 return new StaticUse.internal(element, StaticUseKind.GENERAL); 201 return new StaticUse.internal(element, StaticUseKind.GENERAL);
214 } 202 }
215 203
216 /// Constructor redirection to [element]. 204 /// Constructor redirection to [element].
217 factory StaticUse.constructorRedirect(ConstructorElement element) { 205 factory StaticUse.constructorRedirect(ConstructorElement element) {
218 return new StaticUse.internal(element, StaticUseKind.GENERAL); 206 return new StaticUse.internal(element, StaticUseKind.GENERAL);
219 } 207 }
220 208
221 /// Initialization of an instance field [element]. 209 /// Initialization of an instance field [element].
222 factory StaticUse.fieldInit(FieldElement element) { 210 factory StaticUse.fieldInit(FieldElement element) {
223 assert(invariant(element, element.isInstanceMember, 211 assert(invariant(element, element.isInstanceMember,
224 message: "Field init element $element must be an instance field.")); 212 message: "Field init element $element must be an instance field."));
225 return new StaticUse.internal(element, StaticUseKind.GENERAL); 213 return new StaticUse.internal(element, StaticUseKind.GENERAL);
226 } 214 }
227 215
228 /// Read access of an instance field or boxed field [element]. 216 /// Read access of an instance field or boxed field [element].
229 factory StaticUse.fieldGet(Element element) { 217 factory StaticUse.fieldGet(Element element) {
230 assert(invariant(element, 218 assert(invariant(
231 element.isInstanceMember || element is BoxFieldElement, 219 element, element.isInstanceMember || element is BoxFieldElement,
232 message: "Field init element $element must be an instance " 220 message: "Field init element $element must be an instance "
233 "or boxed field.")); 221 "or boxed field."));
234 return new StaticUse.internal(element, StaticUseKind.FIELD_GET); 222 return new StaticUse.internal(element, StaticUseKind.FIELD_GET);
235 } 223 }
236 224
237 /// Write access of an instance field or boxed field [element]. 225 /// Write access of an instance field or boxed field [element].
238 factory StaticUse.fieldSet(Element element) { 226 factory StaticUse.fieldSet(Element element) {
239 assert(invariant(element, 227 assert(invariant(
240 element.isInstanceMember || element is BoxFieldElement, 228 element, element.isInstanceMember || element is BoxFieldElement,
241 message: "Field init element $element must be an instance " 229 message: "Field init element $element must be an instance "
242 "or boxed field.")); 230 "or boxed field."));
243 return new StaticUse.internal(element, StaticUseKind.FIELD_SET); 231 return new StaticUse.internal(element, StaticUseKind.FIELD_SET);
244 } 232 }
245 233
246 /// Read of a local function [element]. 234 /// Read of a local function [element].
247 factory StaticUse.closure(LocalFunctionElement element) { 235 factory StaticUse.closure(LocalFunctionElement element) {
248 return new StaticUse.internal(element, StaticUseKind.CLOSURE); 236 return new StaticUse.internal(element, StaticUseKind.CLOSURE);
249 } 237 }
250 238
251 /// Unknown use of [element]. 239 /// Unknown use of [element].
252 @deprecated 240 @deprecated
253 factory StaticUse.foreignUse(Element element) { 241 factory StaticUse.foreignUse(Element element) {
254 return new StaticUse.internal(element, StaticUseKind.GENERAL); 242 return new StaticUse.internal(element, StaticUseKind.GENERAL);
255 } 243 }
256 244
257 bool operator ==(other) { 245 bool operator ==(other) {
258 if (identical(this, other)) return true; 246 if (identical(this, other)) return true;
259 if (other is! StaticUse) return false; 247 if (other is! StaticUse) return false;
260 return element == other.element && 248 return element == other.element && kind == other.kind;
261 kind == other.kind;
262 } 249 }
263 250
264 String toString() => 'StaticUse($element,$kind)'; 251 String toString() => 'StaticUse($element,$kind)';
265 } 252 }
266 253
267 enum TypeUseKind { 254 enum TypeUseKind {
268 IS_CHECK, 255 IS_CHECK,
269 AS_CAST, 256 AS_CAST,
270 CHECKED_MODE_CHECK, 257 CHECKED_MODE_CHECK,
271 CATCH_TYPE, 258 CATCH_TYPE,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 } 297 }
311 298
312 /// [type] used in an instantiation, like `new T();`. 299 /// [type] used in an instantiation, like `new T();`.
313 factory TypeUse.instantiation(InterfaceType type) { 300 factory TypeUse.instantiation(InterfaceType type) {
314 return new TypeUse.internal(type, TypeUseKind.INSTANTIATION); 301 return new TypeUse.internal(type, TypeUseKind.INSTANTIATION);
315 } 302 }
316 303
317 bool operator ==(other) { 304 bool operator ==(other) {
318 if (identical(this, other)) return true; 305 if (identical(this, other)) return true;
319 if (other is! TypeUse) return false; 306 if (other is! TypeUse) return false;
320 return type == other.type && 307 return type == other.type && kind == other.kind;
321 kind == other.kind;
322 } 308 }
323 309
324 String toString() => 'TypeUse($type,$kind)'; 310 String toString() => 'TypeUse($type,$kind)';
325 } 311 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/universe/universe.dart ('k') | pkg/compiler/lib/src/universe/world_impact.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698