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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend_impact.dart

Issue 2814453005: Merge CommonElements and BackendHelpers! (Closed)
Patch Set: comments and re-merge, take two 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 dart2js.js_helpers.impact; 5 library dart2js.js_helpers.impact;
6 6
7 import '../common/names.dart'; 7 import '../common/names.dart';
8 import '../common_elements.dart' show CommonElements, ElementEnvironment; 8 import '../common_elements.dart' show CommonElements, ElementEnvironment;
9 import '../elements/types.dart' show InterfaceType; 9 import '../elements/types.dart' show InterfaceType;
10 import '../elements/entities.dart'; 10 import '../elements/entities.dart';
11 import '../options.dart'; 11 import '../options.dart';
12 import '../universe/selector.dart'; 12 import '../universe/selector.dart';
13 import '../universe/world_impact.dart' 13 import '../universe/world_impact.dart'
14 show WorldImpact, WorldImpactBuilder, WorldImpactBuilderImpl; 14 show WorldImpact, WorldImpactBuilder, WorldImpactBuilderImpl;
15 import '../universe/use.dart'; 15 import '../universe/use.dart';
16 import '../util/enumset.dart'; 16 import '../util/enumset.dart';
17 import 'backend_helpers.dart';
18 17
19 /// Backend specific features required by a backend impact. 18 /// Backend specific features required by a backend impact.
20 enum BackendFeature { 19 enum BackendFeature {
21 needToInitializeIsolateAffinityTag, 20 needToInitializeIsolateAffinityTag,
22 needToInitializeDispatchProperty, 21 needToInitializeDispatchProperty,
23 } 22 }
24 23
25 /// A set of JavaScript backend dependencies. 24 /// A set of JavaScript backend dependencies.
26 class BackendImpact { 25 class BackendImpact {
27 final List<FunctionEntity> staticUses; 26 final List<FunctionEntity> staticUses;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 for (BackendImpact otherImpact in otherImpacts) { 84 for (BackendImpact otherImpact in otherImpacts) {
86 otherImpact.registerImpact(worldImpactBuilder, elementEnvironment); 85 otherImpact.registerImpact(worldImpactBuilder, elementEnvironment);
87 } 86 }
88 } 87 }
89 } 88 }
90 89
91 /// The JavaScript backend dependencies for various features. 90 /// The JavaScript backend dependencies for various features.
92 class BackendImpacts { 91 class BackendImpacts {
93 final CompilerOptions _options; 92 final CompilerOptions _options;
94 final CommonElements _commonElements; 93 final CommonElements _commonElements;
95 final BackendHelpers _helpers;
96 94
97 BackendImpacts(this._options, this._commonElements, this._helpers); 95 BackendImpacts(this._options, this._commonElements);
98 96
99 BackendImpact _getRuntimeTypeArgument; 97 BackendImpact _getRuntimeTypeArgument;
100 98
101 BackendImpact get getRuntimeTypeArgument { 99 BackendImpact get getRuntimeTypeArgument {
102 return _getRuntimeTypeArgument ??= new BackendImpact(globalUses: [ 100 return _getRuntimeTypeArgument ??= new BackendImpact(globalUses: [
103 _helpers.getRuntimeTypeArgument, 101 _commonElements.getRuntimeTypeArgument,
104 _helpers.getTypeArgumentByIndex, 102 _commonElements.getTypeArgumentByIndex,
105 ]); 103 ]);
106 } 104 }
107 105
108 BackendImpact _computeSignature; 106 BackendImpact _computeSignature;
109 107
110 BackendImpact get computeSignature { 108 BackendImpact get computeSignature {
111 return _computeSignature ??= new BackendImpact(globalUses: [ 109 return _computeSignature ??= new BackendImpact(globalUses: [
112 _helpers.setRuntimeTypeInfo, 110 _commonElements.setRuntimeTypeInfo,
113 _helpers.getRuntimeTypeInfo, 111 _commonElements.getRuntimeTypeInfo,
114 _helpers.computeSignature, 112 _commonElements.computeSignature,
115 _helpers.getRuntimeTypeArguments 113 _commonElements.getRuntimeTypeArguments
116 ], otherImpacts: [ 114 ], otherImpacts: [
117 listValues 115 listValues
118 ]); 116 ]);
119 } 117 }
120 118
121 BackendImpact _mainWithArguments; 119 BackendImpact _mainWithArguments;
122 120
123 BackendImpact get mainWithArguments { 121 BackendImpact get mainWithArguments {
124 return _mainWithArguments ??= new BackendImpact( 122 return _mainWithArguments ??= new BackendImpact(instantiatedClasses: [
125 instantiatedClasses: [_helpers.jsArrayClass, _helpers.jsStringClass]); 123 _commonElements.jsArrayClass,
124 _commonElements.jsStringClass
125 ]);
126 } 126 }
127 127
128 BackendImpact _asyncBody; 128 BackendImpact _asyncBody;
129 129
130 BackendImpact get asyncBody { 130 BackendImpact get asyncBody {
131 return _asyncBody ??= new BackendImpact(staticUses: [ 131 return _asyncBody ??= new BackendImpact(staticUses: [
132 _helpers.asyncHelper, 132 _commonElements.asyncHelper,
133 _helpers.syncCompleterConstructor, 133 _commonElements.syncCompleterConstructor,
134 _helpers.streamIteratorConstructor, 134 _commonElements.streamIteratorConstructor,
135 _helpers.wrapBody 135 _commonElements.wrapBody
136 ]); 136 ]);
137 } 137 }
138 138
139 BackendImpact _syncStarBody; 139 BackendImpact _syncStarBody;
140 140
141 BackendImpact get syncStarBody { 141 BackendImpact get syncStarBody {
142 return _syncStarBody ??= new BackendImpact(staticUses: [ 142 return _syncStarBody ??= new BackendImpact(staticUses: [
143 _helpers.syncStarIterableConstructor, 143 _commonElements.syncStarIterableConstructor,
144 _helpers.endOfIteration, 144 _commonElements.endOfIteration,
145 _helpers.yieldStar, 145 _commonElements.yieldStar,
146 _helpers.syncStarUncaughtError 146 _commonElements.syncStarUncaughtError
147 ], instantiatedClasses: [ 147 ], instantiatedClasses: [
148 _helpers.syncStarIterable 148 _commonElements.syncStarIterable
149 ]); 149 ]);
150 } 150 }
151 151
152 BackendImpact _asyncStarBody; 152 BackendImpact _asyncStarBody;
153 153
154 BackendImpact get asyncStarBody { 154 BackendImpact get asyncStarBody {
155 return _asyncStarBody ??= new BackendImpact(staticUses: [ 155 return _asyncStarBody ??= new BackendImpact(staticUses: [
156 _helpers.asyncStarHelper, 156 _commonElements.asyncStarHelper,
157 _helpers.streamOfController, 157 _commonElements.streamOfController,
158 _helpers.yieldSingle, 158 _commonElements.yieldSingle,
159 _helpers.yieldStar, 159 _commonElements.yieldStar,
160 _helpers.asyncStarControllerConstructor, 160 _commonElements.asyncStarControllerConstructor,
161 _helpers.streamIteratorConstructor, 161 _commonElements.streamIteratorConstructor,
162 _helpers.wrapBody 162 _commonElements.wrapBody
163 ], instantiatedClasses: [ 163 ], instantiatedClasses: [
164 _helpers.asyncStarController 164 _commonElements.asyncStarController
165 ]); 165 ]);
166 } 166 }
167 167
168 BackendImpact _typeVariableBoundCheck; 168 BackendImpact _typeVariableBoundCheck;
169 169
170 BackendImpact get typeVariableBoundCheck { 170 BackendImpact get typeVariableBoundCheck {
171 return _typeVariableBoundCheck ??= new BackendImpact( 171 return _typeVariableBoundCheck ??= new BackendImpact(staticUses: [
172 staticUses: [_helpers.throwTypeError, _helpers.assertIsSubtype]); 172 _commonElements.throwTypeError,
173 _commonElements.assertIsSubtype
174 ]);
173 } 175 }
174 176
175 BackendImpact _abstractClassInstantiation; 177 BackendImpact _abstractClassInstantiation;
176 178
177 BackendImpact get abstractClassInstantiation { 179 BackendImpact get abstractClassInstantiation {
178 return _abstractClassInstantiation ??= new BackendImpact( 180 return _abstractClassInstantiation ??= new BackendImpact(
179 staticUses: [_helpers.throwAbstractClassInstantiationError], 181 staticUses: [_commonElements.throwAbstractClassInstantiationError],
180 otherImpacts: [_needsString('Needed to encode the message.')]); 182 otherImpacts: [_needsString('Needed to encode the message.')]);
181 } 183 }
182 184
183 BackendImpact _fallThroughError; 185 BackendImpact _fallThroughError;
184 186
185 BackendImpact get fallThroughError { 187 BackendImpact get fallThroughError {
186 return _fallThroughError ??= 188 return _fallThroughError ??=
187 new BackendImpact(staticUses: [_helpers.fallThroughError]); 189 new BackendImpact(staticUses: [_commonElements.fallThroughError]);
188 } 190 }
189 191
190 BackendImpact _asCheck; 192 BackendImpact _asCheck;
191 193
192 BackendImpact get asCheck { 194 BackendImpact get asCheck {
193 return _asCheck ??= 195 return _asCheck ??=
194 new BackendImpact(staticUses: [_helpers.throwRuntimeError]); 196 new BackendImpact(staticUses: [_commonElements.throwRuntimeError]);
195 } 197 }
196 198
197 BackendImpact _throwNoSuchMethod; 199 BackendImpact _throwNoSuchMethod;
198 200
199 BackendImpact get throwNoSuchMethod { 201 BackendImpact get throwNoSuchMethod {
200 return _throwNoSuchMethod ??= new BackendImpact( 202 return _throwNoSuchMethod ??= new BackendImpact(
201 instantiatedClasses: _options.useKernel 203 instantiatedClasses: _options.useKernel
202 ? [ 204 ? [
203 _commonElements.symbolClass, 205 _commonElements.symbolClass,
204 ] 206 ]
205 : [], 207 : [],
206 staticUses: _options.useKernel 208 staticUses: _options.useKernel
207 ? [ 209 ? [
208 _helpers.genericNoSuchMethod, 210 _commonElements.genericNoSuchMethod,
209 _helpers.unresolvedConstructorError, 211 _commonElements.unresolvedConstructorError,
210 _helpers.unresolvedStaticMethodError, 212 _commonElements.unresolvedStaticMethodError,
211 _helpers.unresolvedStaticGetterError, 213 _commonElements.unresolvedStaticGetterError,
212 _helpers.unresolvedStaticSetterError, 214 _commonElements.unresolvedStaticSetterError,
213 _helpers.unresolvedTopLevelMethodError, 215 _commonElements.unresolvedTopLevelMethodError,
214 _helpers.unresolvedTopLevelGetterError, 216 _commonElements.unresolvedTopLevelGetterError,
215 _helpers.unresolvedTopLevelSetterError, 217 _commonElements.unresolvedTopLevelSetterError,
216 _commonElements.symbolConstructor, 218 _commonElements.symbolConstructor,
217 ] 219 ]
218 : [ 220 : [
219 _helpers.throwNoSuchMethod, 221 _commonElements.throwNoSuchMethod,
220 ], 222 ],
221 otherImpacts: [ 223 otherImpacts: [
222 // Also register the types of the arguments passed to this method. 224 // Also register the types of the arguments passed to this method.
223 _needsList( 225 _needsList(
224 'Needed to encode the arguments for throw NoSuchMethodError.'), 226 'Needed to encode the arguments for throw NoSuchMethodError.'),
225 _needsString('Needed to encode the name for throw NoSuchMethodError.') 227 _needsString('Needed to encode the name for throw NoSuchMethodError.')
226 ]); 228 ]);
227 } 229 }
228 230
229 BackendImpact _stringValues; 231 BackendImpact _stringValues;
230 232
231 BackendImpact get stringValues { 233 BackendImpact get stringValues {
232 return _stringValues ??= 234 return _stringValues ??=
233 new BackendImpact(instantiatedClasses: [_helpers.jsStringClass]); 235 new BackendImpact(instantiatedClasses: [_commonElements.jsStringClass]);
234 } 236 }
235 237
236 BackendImpact _numValues; 238 BackendImpact _numValues;
237 239
238 BackendImpact get numValues { 240 BackendImpact get numValues {
239 return _numValues ??= new BackendImpact(instantiatedClasses: [ 241 return _numValues ??= new BackendImpact(instantiatedClasses: [
240 _helpers.jsIntClass, 242 _commonElements.jsIntClass,
241 _helpers.jsPositiveIntClass, 243 _commonElements.jsPositiveIntClass,
242 _helpers.jsUInt32Class, 244 _commonElements.jsUInt32Class,
243 _helpers.jsUInt31Class, 245 _commonElements.jsUInt31Class,
244 _helpers.jsNumberClass, 246 _commonElements.jsNumberClass,
245 _helpers.jsDoubleClass 247 _commonElements.jsDoubleClass
246 ]); 248 ]);
247 } 249 }
248 250
249 BackendImpact get intValues => numValues; 251 BackendImpact get intValues => numValues;
250 252
251 BackendImpact get doubleValues => numValues; 253 BackendImpact get doubleValues => numValues;
252 254
253 BackendImpact _boolValues; 255 BackendImpact _boolValues;
254 256
255 BackendImpact get boolValues { 257 BackendImpact get boolValues {
256 return _boolValues ??= 258 return _boolValues ??=
257 new BackendImpact(instantiatedClasses: [_helpers.jsBoolClass]); 259 new BackendImpact(instantiatedClasses: [_commonElements.jsBoolClass]);
258 } 260 }
259 261
260 BackendImpact _nullValue; 262 BackendImpact _nullValue;
261 263
262 BackendImpact get nullValue { 264 BackendImpact get nullValue {
263 return _nullValue ??= 265 return _nullValue ??=
264 new BackendImpact(instantiatedClasses: [_helpers.jsNullClass]); 266 new BackendImpact(instantiatedClasses: [_commonElements.jsNullClass]);
265 } 267 }
266 268
267 BackendImpact _listValues; 269 BackendImpact _listValues;
268 270
269 BackendImpact get listValues { 271 BackendImpact get listValues {
270 return _listValues ??= new BackendImpact(globalClasses: [ 272 return _listValues ??= new BackendImpact(globalClasses: [
271 _helpers.jsArrayClass, 273 _commonElements.jsArrayClass,
272 _helpers.jsMutableArrayClass, 274 _commonElements.jsMutableArrayClass,
273 _helpers.jsFixedArrayClass, 275 _commonElements.jsFixedArrayClass,
274 _helpers.jsExtendableArrayClass, 276 _commonElements.jsExtendableArrayClass,
275 _helpers.jsUnmodifiableArrayClass 277 _commonElements.jsUnmodifiableArrayClass
276 ]); 278 ]);
277 } 279 }
278 280
279 BackendImpact _throwRuntimeError; 281 BackendImpact _throwRuntimeError;
280 282
281 BackendImpact get throwRuntimeError { 283 BackendImpact get throwRuntimeError {
282 return _throwRuntimeError ??= new BackendImpact( 284 return _throwRuntimeError ??= new BackendImpact(
283 staticUses: _options.useKernel 285 staticUses: _options.useKernel
284 ? [ 286 ? [
285 // TODO(sra): Refactor impacts so that we know which of these 287 // TODO(sra): Refactor impacts so that we know which of these
286 // are called. 288 // are called.
287 _helpers.malformedTypeError, 289 _commonElements.malformedTypeError,
288 _helpers.throwRuntimeError, 290 _commonElements.throwRuntimeError,
289 ] 291 ]
290 : [ 292 : [
291 _helpers.throwRuntimeError, 293 _commonElements.throwRuntimeError,
292 ], 294 ],
293 otherImpacts: [ 295 otherImpacts: [
294 // Also register the types of the arguments passed to this method. 296 // Also register the types of the arguments passed to this method.
295 stringValues 297 stringValues
296 ]); 298 ]);
297 } 299 }
298 300
299 BackendImpact _superNoSuchMethod; 301 BackendImpact _superNoSuchMethod;
300 302
301 BackendImpact get superNoSuchMethod { 303 BackendImpact get superNoSuchMethod {
302 return _superNoSuchMethod ??= new BackendImpact(staticUses: [ 304 return _superNoSuchMethod ??= new BackendImpact(staticUses: [
303 _helpers.createInvocationMirror, 305 _commonElements.createInvocationMirror,
304 _helpers.objectNoSuchMethod 306 _commonElements.objectNoSuchMethod
305 ], otherImpacts: [ 307 ], otherImpacts: [
306 _needsInt('Needed to encode the invocation kind of super.noSuchMethod.'), 308 _needsInt('Needed to encode the invocation kind of super.noSuchMethod.'),
307 _needsList('Needed to encode the arguments of super.noSuchMethod.'), 309 _needsList('Needed to encode the arguments of super.noSuchMethod.'),
308 _needsString('Needed to encode the name of super.noSuchMethod.') 310 _needsString('Needed to encode the name of super.noSuchMethod.')
309 ]); 311 ]);
310 } 312 }
311 313
312 BackendImpact _constantMapLiteral; 314 BackendImpact _constantMapLiteral;
313 315
314 BackendImpact get constantMapLiteral { 316 BackendImpact get constantMapLiteral {
315 return _constantMapLiteral ??= new BackendImpact(instantiatedClasses: [ 317 return _constantMapLiteral ??= new BackendImpact(instantiatedClasses: [
316 _helpers.constantMapClass, 318 _commonElements.constantMapClass,
317 _helpers.constantProtoMapClass, 319 _commonElements.constantProtoMapClass,
318 _helpers.constantStringMapClass, 320 _commonElements.constantStringMapClass,
319 _helpers.generalConstantMapClass, 321 _commonElements.generalConstantMapClass,
320 ]); 322 ]);
321 } 323 }
322 324
323 BackendImpact _symbolConstructor; 325 BackendImpact _symbolConstructor;
324 326
325 BackendImpact get symbolConstructor { 327 BackendImpact get symbolConstructor {
326 return _symbolConstructor ??= 328 return _symbolConstructor ??= new BackendImpact(
327 new BackendImpact(staticUses: [_helpers.symbolValidatedConstructor]); 329 staticUses: [_commonElements.symbolValidatedConstructor]);
328 } 330 }
329 331
330 BackendImpact _constSymbol; 332 BackendImpact _constSymbol;
331 333
332 BackendImpact get constSymbol { 334 BackendImpact get constSymbol {
333 return _constSymbol ??= new BackendImpact( 335 return _constSymbol ??= new BackendImpact(
334 instantiatedClasses: [_commonElements.symbolClass], 336 instantiatedClasses: [_commonElements.symbolClass],
335 staticUses: [_commonElements.symbolConstructor]); 337 staticUses: [_commonElements.symbolConstructor]);
336 } 338 }
337 339
(...skipping 12 matching lines...) Expand all
350 /// Helper for registering that `String` is needed. 352 /// Helper for registering that `String` is needed.
351 BackendImpact _needsString(String reason) { 353 BackendImpact _needsString(String reason) {
352 // TODO(johnniwinther): Register [reason] for use in dump-info. 354 // TODO(johnniwinther): Register [reason] for use in dump-info.
353 return stringValues; 355 return stringValues;
354 } 356 }
355 357
356 BackendImpact _assertWithoutMessage; 358 BackendImpact _assertWithoutMessage;
357 359
358 BackendImpact get assertWithoutMessage { 360 BackendImpact get assertWithoutMessage {
359 return _assertWithoutMessage ??= 361 return _assertWithoutMessage ??=
360 new BackendImpact(staticUses: [_helpers.assertHelper]); 362 new BackendImpact(staticUses: [_commonElements.assertHelper]);
361 } 363 }
362 364
363 BackendImpact _assertWithMessage; 365 BackendImpact _assertWithMessage;
364 366
365 BackendImpact get assertWithMessage { 367 BackendImpact get assertWithMessage {
366 return _assertWithMessage ??= new BackendImpact( 368 return _assertWithMessage ??= new BackendImpact(
367 staticUses: [_helpers.assertTest, _helpers.assertThrow]); 369 staticUses: [_commonElements.assertTest, _commonElements.assertThrow]);
368 } 370 }
369 371
370 BackendImpact _asyncForIn; 372 BackendImpact _asyncForIn;
371 373
372 BackendImpact get asyncForIn { 374 BackendImpact get asyncForIn {
373 return _asyncForIn ??= 375 return _asyncForIn ??= new BackendImpact(
374 new BackendImpact(staticUses: [_helpers.streamIteratorConstructor]); 376 staticUses: [_commonElements.streamIteratorConstructor]);
375 } 377 }
376 378
377 BackendImpact _stringInterpolation; 379 BackendImpact _stringInterpolation;
378 380
379 BackendImpact get stringInterpolation { 381 BackendImpact get stringInterpolation {
380 return _stringInterpolation ??= new BackendImpact( 382 return _stringInterpolation ??= new BackendImpact(
381 dynamicUses: [Selectors.toString_], 383 dynamicUses: [Selectors.toString_],
382 staticUses: [_helpers.stringInterpolationHelper], 384 staticUses: [_commonElements.stringInterpolationHelper],
383 otherImpacts: [_needsString('Strings are created.')]); 385 otherImpacts: [_needsString('Strings are created.')]);
384 } 386 }
385 387
386 BackendImpact _stringJuxtaposition; 388 BackendImpact _stringJuxtaposition;
387 389
388 BackendImpact get stringJuxtaposition { 390 BackendImpact get stringJuxtaposition {
389 return _stringJuxtaposition ??= _needsString('String.concat is used.'); 391 return _stringJuxtaposition ??= _needsString('String.concat is used.');
390 } 392 }
391 393
392 BackendImpact get nullLiteral => nullValue; 394 BackendImpact get nullLiteral => nullValue;
393 395
394 BackendImpact get boolLiteral => boolValues; 396 BackendImpact get boolLiteral => boolValues;
395 397
396 BackendImpact get intLiteral => intValues; 398 BackendImpact get intLiteral => intValues;
397 399
398 BackendImpact get doubleLiteral => doubleValues; 400 BackendImpact get doubleLiteral => doubleValues;
399 401
400 BackendImpact get stringLiteral => stringValues; 402 BackendImpact get stringLiteral => stringValues;
401 403
402 BackendImpact _catchStatement; 404 BackendImpact _catchStatement;
403 405
404 BackendImpact get catchStatement { 406 BackendImpact get catchStatement {
405 return _catchStatement ??= new BackendImpact(staticUses: [ 407 return _catchStatement ??= new BackendImpact(staticUses: [
406 _helpers.exceptionUnwrapper 408 _commonElements.exceptionUnwrapper
407 ], instantiatedClasses: [ 409 ], instantiatedClasses: [
408 _helpers.jsPlainJavaScriptObjectClass, 410 _commonElements.jsPlainJavaScriptObjectClass,
409 _helpers.jsUnknownJavaScriptObjectClass 411 _commonElements.jsUnknownJavaScriptObjectClass
410 ]); 412 ]);
411 } 413 }
412 414
413 BackendImpact _throwExpression; 415 BackendImpact _throwExpression;
414 416
415 BackendImpact get throwExpression { 417 BackendImpact get throwExpression {
416 return _throwExpression ??= new BackendImpact( 418 return _throwExpression ??= new BackendImpact(
417 // We don't know ahead of time whether we will need the throw in a 419 // We don't know ahead of time whether we will need the throw in a
418 // statement context or an expression context, so we register both 420 // statement context or an expression context, so we register both
419 // here, even though we may not need the throwExpression helper. 421 // here, even though we may not need the throwExpression helper.
420 staticUses: [ 422 staticUses: [
421 _helpers.wrapExceptionHelper, 423 _commonElements.wrapExceptionHelper,
422 _helpers.throwExpressionHelper 424 _commonElements.throwExpressionHelper
423 ]); 425 ]);
424 } 426 }
425 427
426 BackendImpact _lazyField; 428 BackendImpact _lazyField;
427 429
428 BackendImpact get lazyField { 430 BackendImpact get lazyField {
429 return _lazyField ??= 431 return _lazyField ??=
430 new BackendImpact(staticUses: [_helpers.cyclicThrowHelper]); 432 new BackendImpact(staticUses: [_commonElements.cyclicThrowHelper]);
431 } 433 }
432 434
433 BackendImpact _typeLiteral; 435 BackendImpact _typeLiteral;
434 436
435 BackendImpact get typeLiteral { 437 BackendImpact get typeLiteral {
436 return _typeLiteral ??= new BackendImpact( 438 return _typeLiteral ??= new BackendImpact(
437 instantiatedClasses: [_helpers.typeLiteralClass], 439 instantiatedClasses: [_commonElements.typeLiteralClass],
438 staticUses: [_helpers.createRuntimeType]); 440 staticUses: [_commonElements.createRuntimeType]);
439 } 441 }
440 442
441 BackendImpact _stackTraceInCatch; 443 BackendImpact _stackTraceInCatch;
442 444
443 BackendImpact get stackTraceInCatch { 445 BackendImpact get stackTraceInCatch {
444 return _stackTraceInCatch ??= new BackendImpact( 446 return _stackTraceInCatch ??= new BackendImpact(
445 instantiatedClasses: [_helpers.stackTraceClass], 447 instantiatedClasses: [_commonElements.stackTraceHelperClass],
446 staticUses: [_helpers.traceFromException]); 448 staticUses: [_commonElements.traceFromException]);
447 } 449 }
448 450
449 BackendImpact _syncForIn; 451 BackendImpact _syncForIn;
450 452
451 BackendImpact get syncForIn { 453 BackendImpact get syncForIn {
452 return _syncForIn ??= new BackendImpact( 454 return _syncForIn ??= new BackendImpact(
453 // The SSA builder recognizes certain for-in loops and can generate 455 // The SSA builder recognizes certain for-in loops and can generate
454 // calls to throwConcurrentModificationError. 456 // calls to throwConcurrentModificationError.
455 staticUses: [_helpers.checkConcurrentModificationError]); 457 staticUses: [_commonElements.checkConcurrentModificationError]);
456 } 458 }
457 459
458 BackendImpact _typeVariableExpression; 460 BackendImpact _typeVariableExpression;
459 461
460 BackendImpact get typeVariableExpression { 462 BackendImpact get typeVariableExpression {
461 return _typeVariableExpression ??= new BackendImpact(staticUses: [ 463 return _typeVariableExpression ??= new BackendImpact(staticUses: [
462 _helpers.setRuntimeTypeInfo, 464 _commonElements.setRuntimeTypeInfo,
463 _helpers.getRuntimeTypeInfo, 465 _commonElements.getRuntimeTypeInfo,
464 _helpers.runtimeTypeToString, 466 _commonElements.runtimeTypeToString,
465 _helpers.createRuntimeType 467 _commonElements.createRuntimeType
466 ], otherImpacts: [ 468 ], otherImpacts: [
467 listValues, 469 listValues,
468 getRuntimeTypeArgument, 470 getRuntimeTypeArgument,
469 _needsInt('Needed for accessing a type variable literal on this.') 471 _needsInt('Needed for accessing a type variable literal on this.')
470 ]); 472 ]);
471 } 473 }
472 474
473 BackendImpact _typeCheck; 475 BackendImpact _typeCheck;
474 476
475 BackendImpact get typeCheck { 477 BackendImpact get typeCheck {
476 return _typeCheck ??= new BackendImpact(otherImpacts: [boolValues]); 478 return _typeCheck ??= new BackendImpact(otherImpacts: [boolValues]);
477 } 479 }
478 480
479 BackendImpact _checkedModeTypeCheck; 481 BackendImpact _checkedModeTypeCheck;
480 482
481 BackendImpact get checkedModeTypeCheck { 483 BackendImpact get checkedModeTypeCheck {
482 return _checkedModeTypeCheck ??= 484 return _checkedModeTypeCheck ??=
483 new BackendImpact(staticUses: [_helpers.throwRuntimeError]); 485 new BackendImpact(staticUses: [_commonElements.throwRuntimeError]);
484 } 486 }
485 487
486 BackendImpact _malformedTypeCheck; 488 BackendImpact _malformedTypeCheck;
487 489
488 BackendImpact get malformedTypeCheck { 490 BackendImpact get malformedTypeCheck {
489 return _malformedTypeCheck ??= new BackendImpact( 491 return _malformedTypeCheck ??= new BackendImpact(
490 staticUses: _options.useKernel 492 staticUses: _options.useKernel
491 ? [ 493 ? [
492 _helpers.malformedTypeError, 494 _commonElements.malformedTypeError,
493 ] 495 ]
494 : [ 496 : [
495 _helpers.throwTypeError, 497 _commonElements.throwTypeError,
496 ]); 498 ]);
497 } 499 }
498 500
499 BackendImpact _genericTypeCheck; 501 BackendImpact _genericTypeCheck;
500 502
501 BackendImpact get genericTypeCheck { 503 BackendImpact get genericTypeCheck {
502 return _genericTypeCheck ??= new BackendImpact(staticUses: [ 504 return _genericTypeCheck ??= new BackendImpact(staticUses: [
503 _helpers.checkSubtype, 505 _commonElements.checkSubtype,
504 // TODO(johnniwinther): Investigate why this is needed. 506 // TODO(johnniwinther): Investigate why this is needed.
505 _helpers.setRuntimeTypeInfo, 507 _commonElements.setRuntimeTypeInfo,
506 _helpers.getRuntimeTypeInfo 508 _commonElements.getRuntimeTypeInfo
507 ], otherImpacts: [ 509 ], otherImpacts: [
508 listValues, 510 listValues,
509 getRuntimeTypeArgument 511 getRuntimeTypeArgument
510 ]); 512 ]);
511 } 513 }
512 514
513 BackendImpact _genericIsCheck; 515 BackendImpact _genericIsCheck;
514 516
515 BackendImpact get genericIsCheck { 517 BackendImpact get genericIsCheck {
516 return _genericIsCheck ??= new BackendImpact(otherImpacts: [intValues]); 518 return _genericIsCheck ??= new BackendImpact(otherImpacts: [intValues]);
517 } 519 }
518 520
519 BackendImpact _genericCheckedModeTypeCheck; 521 BackendImpact _genericCheckedModeTypeCheck;
520 522
521 BackendImpact get genericCheckedModeTypeCheck { 523 BackendImpact get genericCheckedModeTypeCheck {
522 return _genericCheckedModeTypeCheck ??= 524 return _genericCheckedModeTypeCheck ??=
523 new BackendImpact(staticUses: [_helpers.assertSubtype]); 525 new BackendImpact(staticUses: [_commonElements.assertSubtype]);
524 } 526 }
525 527
526 BackendImpact _typeVariableTypeCheck; 528 BackendImpact _typeVariableTypeCheck;
527 529
528 BackendImpact get typeVariableTypeCheck { 530 BackendImpact get typeVariableTypeCheck {
529 return _typeVariableTypeCheck ??= 531 return _typeVariableTypeCheck ??= new BackendImpact(
530 new BackendImpact(staticUses: [_helpers.checkSubtypeOfRuntimeType]); 532 staticUses: [_commonElements.checkSubtypeOfRuntimeType]);
531 } 533 }
532 534
533 BackendImpact _typeVariableCheckedModeTypeCheck; 535 BackendImpact _typeVariableCheckedModeTypeCheck;
534 536
535 BackendImpact get typeVariableCheckedModeTypeCheck { 537 BackendImpact get typeVariableCheckedModeTypeCheck {
536 return _typeVariableCheckedModeTypeCheck ??= 538 return _typeVariableCheckedModeTypeCheck ??= new BackendImpact(
537 new BackendImpact(staticUses: [_helpers.assertSubtypeOfRuntimeType]); 539 staticUses: [_commonElements.assertSubtypeOfRuntimeType]);
538 } 540 }
539 541
540 BackendImpact _functionTypeCheck; 542 BackendImpact _functionTypeCheck;
541 543
542 BackendImpact get functionTypeCheck { 544 BackendImpact get functionTypeCheck {
543 return _functionTypeCheck ??= 545 return _functionTypeCheck ??=
544 new BackendImpact(staticUses: [/*helpers.functionTypeTestMetaHelper*/]); 546 new BackendImpact(staticUses: [/*helpers.functionTypeTestMetaHelper*/]);
545 } 547 }
546 548
547 BackendImpact _nativeTypeCheck; 549 BackendImpact _nativeTypeCheck;
548 550
549 BackendImpact get nativeTypeCheck { 551 BackendImpact get nativeTypeCheck {
550 return _nativeTypeCheck ??= new BackendImpact(staticUses: [ 552 return _nativeTypeCheck ??= new BackendImpact(staticUses: [
551 // We will neeed to add the "$is" and "$as" properties on the 553 // We will neeed to add the "$is" and "$as" properties on the
552 // JavaScript object prototype, so we make sure 554 // JavaScript object prototype, so we make sure
553 // [:defineProperty:] is compiled. 555 // [:defineProperty:] is compiled.
554 _helpers.defineProperty 556 _commonElements.defineProperty
555 ]); 557 ]);
556 } 558 }
557 559
558 BackendImpact _closure; 560 BackendImpact _closure;
559 561
560 BackendImpact get closure { 562 BackendImpact get closure {
561 return _closure ??= 563 return _closure ??=
562 new BackendImpact(instantiatedClasses: [_commonElements.functionClass]); 564 new BackendImpact(instantiatedClasses: [_commonElements.functionClass]);
563 } 565 }
564 566
565 BackendImpact _interceptorUse; 567 BackendImpact _interceptorUse;
566 568
567 BackendImpact get interceptorUse { 569 BackendImpact get interceptorUse {
568 return _interceptorUse ??= new BackendImpact( 570 return _interceptorUse ??= new BackendImpact(
569 staticUses: [ 571 staticUses: [
570 _helpers.getNativeInterceptorMethod 572 _commonElements.getNativeInterceptorMethod
571 ], 573 ],
572 instantiatedClasses: [ 574 instantiatedClasses: [
573 _helpers.jsJavaScriptObjectClass, 575 _commonElements.jsJavaScriptObjectClass,
574 _helpers.jsPlainJavaScriptObjectClass, 576 _commonElements.jsPlainJavaScriptObjectClass,
575 _helpers.jsJavaScriptFunctionClass 577 _commonElements.jsJavaScriptFunctionClass
576 ], 578 ],
577 features: new EnumSet<BackendFeature>.fromValues([ 579 features: new EnumSet<BackendFeature>.fromValues([
578 BackendFeature.needToInitializeDispatchProperty, 580 BackendFeature.needToInitializeDispatchProperty,
579 BackendFeature.needToInitializeIsolateAffinityTag 581 BackendFeature.needToInitializeIsolateAffinityTag
580 ], fixed: true)); 582 ], fixed: true));
581 } 583 }
582 584
583 BackendImpact _numClasses; 585 BackendImpact _numClasses;
584 586
585 BackendImpact get numClasses { 587 BackendImpact get numClasses {
586 return _numClasses ??= new BackendImpact( 588 return _numClasses ??= new BackendImpact(
587 // The backend will try to optimize number operations and use the 589 // The backend will try to optimize number operations and use the
588 // `iae` helper directly. 590 // `iae` helper directly.
589 globalUses: [_helpers.throwIllegalArgumentException]); 591 globalUses: [_commonElements.throwIllegalArgumentException]);
590 } 592 }
591 593
592 BackendImpact _listOrStringClasses; 594 BackendImpact _listOrStringClasses;
593 595
594 BackendImpact get listOrStringClasses { 596 BackendImpact get listOrStringClasses {
595 return _listOrStringClasses ??= new BackendImpact( 597 return _listOrStringClasses ??= new BackendImpact(
596 // The backend will try to optimize array and string access and use the 598 // The backend will try to optimize array and string access and use the
597 // `ioore` and `iae` _helpers directly. 599 // `ioore` and `iae` _commonElements directly.
598 globalUses: [ 600 globalUses: [
599 _helpers.throwIndexOutOfRangeException, 601 _commonElements.throwIndexOutOfRangeException,
600 _helpers.throwIllegalArgumentException 602 _commonElements.throwIllegalArgumentException
601 ]); 603 ]);
602 } 604 }
603 605
604 BackendImpact _functionClass; 606 BackendImpact _functionClass;
605 607
606 BackendImpact get functionClass { 608 BackendImpact get functionClass {
607 return _functionClass ??= 609 return _functionClass ??=
608 new BackendImpact(globalClasses: [_helpers.closureClass]); 610 new BackendImpact(globalClasses: [_commonElements.closureClass]);
609 } 611 }
610 612
611 BackendImpact _mapClass; 613 BackendImpact _mapClass;
612 614
613 BackendImpact get mapClass { 615 BackendImpact get mapClass {
614 return _mapClass ??= new BackendImpact( 616 return _mapClass ??= new BackendImpact(
615 // The backend will use a literal list to initialize the entries 617 // The backend will use a literal list to initialize the entries
616 // of the map. 618 // of the map.
617 globalClasses: [_commonElements.listClass, _helpers.mapLiteralClass]); 619 globalClasses: [
620 _commonElements.listClass,
621 _commonElements.mapLiteralClass
622 ]);
618 } 623 }
619 624
620 BackendImpact _boundClosureClass; 625 BackendImpact _boundClosureClass;
621 626
622 BackendImpact get boundClosureClass { 627 BackendImpact get boundClosureClass {
623 return _boundClosureClass ??= 628 return _boundClosureClass ??=
624 new BackendImpact(globalClasses: [_helpers.boundClosureClass]); 629 new BackendImpact(globalClasses: [_commonElements.boundClosureClass]);
625 } 630 }
626 631
627 BackendImpact _nativeOrExtendsClass; 632 BackendImpact _nativeOrExtendsClass;
628 633
629 BackendImpact get nativeOrExtendsClass { 634 BackendImpact get nativeOrExtendsClass {
630 return _nativeOrExtendsClass ??= new BackendImpact(globalUses: [ 635 return _nativeOrExtendsClass ??= new BackendImpact(globalUses: [
631 _helpers.getNativeInterceptorMethod 636 _commonElements.getNativeInterceptorMethod
632 ], globalClasses: [ 637 ], globalClasses: [
633 _helpers.jsInterceptorClass, 638 _commonElements.jsInterceptorClass,
634 _helpers.jsJavaScriptObjectClass, 639 _commonElements.jsJavaScriptObjectClass,
635 _helpers.jsPlainJavaScriptObjectClass, 640 _commonElements.jsPlainJavaScriptObjectClass,
636 _helpers.jsJavaScriptFunctionClass 641 _commonElements.jsJavaScriptFunctionClass
637 ]); 642 ]);
638 } 643 }
639 644
640 BackendImpact _mapLiteralClass; 645 BackendImpact _mapLiteralClass;
641 646
642 BackendImpact get mapLiteralClass { 647 BackendImpact get mapLiteralClass {
643 return _mapLiteralClass ??= new BackendImpact(globalUses: [ 648 return _mapLiteralClass ??= new BackendImpact(globalUses: [
644 _helpers.mapLiteralConstructor, 649 _commonElements.mapLiteralConstructor,
645 _helpers.mapLiteralConstructorEmpty, 650 _commonElements.mapLiteralConstructorEmpty,
646 _helpers.mapLiteralUntypedMaker, 651 _commonElements.mapLiteralUntypedMaker,
647 _helpers.mapLiteralUntypedEmptyMaker 652 _commonElements.mapLiteralUntypedEmptyMaker
648 ]); 653 ]);
649 } 654 }
650 655
651 BackendImpact _closureClass; 656 BackendImpact _closureClass;
652 657
653 BackendImpact get closureClass { 658 BackendImpact get closureClass {
654 return _closureClass ??= 659 return _closureClass ??=
655 new BackendImpact(globalUses: [_helpers.closureFromTearOff]); 660 new BackendImpact(globalUses: [_commonElements.closureFromTearOff]);
656 } 661 }
657 662
658 BackendImpact _listClasses; 663 BackendImpact _listClasses;
659 664
660 BackendImpact get listClasses { 665 BackendImpact get listClasses {
661 return _listClasses ??= new BackendImpact( 666 return _listClasses ??= new BackendImpact(
662 // Literal lists can be translated into calls to these functions: 667 // Literal lists can be translated into calls to these functions:
663 globalUses: [ 668 globalUses: [
664 _helpers.jsArrayTypedConstructor, 669 _commonElements.jsArrayTypedConstructor,
665 _helpers.setRuntimeTypeInfo, 670 _commonElements.setRuntimeTypeInfo,
666 _helpers.getTypeArgumentByIndex 671 _commonElements.getTypeArgumentByIndex
667 ]); 672 ]);
668 } 673 }
669 674
670 BackendImpact _jsIndexingBehavior; 675 BackendImpact _jsIndexingBehavior;
671 676
672 BackendImpact get jsIndexingBehavior { 677 BackendImpact get jsIndexingBehavior {
673 return _jsIndexingBehavior ??= new BackendImpact( 678 return _jsIndexingBehavior ??= new BackendImpact(
674 // These two _helpers are used by the emitter and the codegen. 679 // These two _commonElements are used by the emitter and the codegen.
675 // Because we cannot enqueue elements at the time of emission, 680 // Because we cannot enqueue elements at the time of emission,
676 // we make sure they are always generated. 681 // we make sure they are always generated.
677 globalUses: [_helpers.isJsIndexable]); 682 globalUses: [_commonElements.isJsIndexable]);
678 } 683 }
679 684
680 BackendImpact _enableTypeAssertions; 685 BackendImpact _enableTypeAssertions;
681 686
682 BackendImpact get enableTypeAssertions { 687 BackendImpact get enableTypeAssertions {
683 return _enableTypeAssertions ??= new BackendImpact( 688 return _enableTypeAssertions ??= new BackendImpact(
684 // Register the helper that checks if the expression in an if/while/for 689 // Register the helper that checks if the expression in an if/while/for
685 // is a boolean. 690 // is a boolean.
686 // TODO(johnniwinther): Should this be registered through a [Feature] 691 // TODO(johnniwinther): Should this be registered through a [Feature]
687 // instead? 692 // instead?
688 globalUses: [_helpers.boolConversionCheck]); 693 globalUses: [_commonElements.boolConversionCheck]);
689 } 694 }
690 695
691 BackendImpact _traceHelper; 696 BackendImpact _traceHelper;
692 697
693 BackendImpact get traceHelper { 698 BackendImpact get traceHelper {
694 return _traceHelper ??= 699 return _traceHelper ??=
695 new BackendImpact(globalUses: [_helpers.traceHelper]); 700 new BackendImpact(globalUses: [_commonElements.traceHelper]);
696 } 701 }
697 702
698 BackendImpact _assertUnreachable; 703 BackendImpact _assertUnreachable;
699 704
700 BackendImpact get assertUnreachable { 705 BackendImpact get assertUnreachable {
701 return _assertUnreachable ??= 706 return _assertUnreachable ??= new BackendImpact(
702 new BackendImpact(globalUses: [_helpers.assertUnreachableMethod]); 707 globalUses: [_commonElements.assertUnreachableMethod]);
703 } 708 }
704 709
705 BackendImpact _runtimeTypeSupport; 710 BackendImpact _runtimeTypeSupport;
706 711
707 BackendImpact get runtimeTypeSupport { 712 BackendImpact get runtimeTypeSupport {
708 return _runtimeTypeSupport ??= new BackendImpact( 713 return _runtimeTypeSupport ??= new BackendImpact(globalClasses: [
709 globalClasses: [_commonElements.listClass], 714 _commonElements.listClass
710 globalUses: [_helpers.setRuntimeTypeInfo, _helpers.getRuntimeTypeInfo], 715 ], globalUses: [
711 otherImpacts: [getRuntimeTypeArgument, computeSignature]); 716 _commonElements.setRuntimeTypeInfo,
717 _commonElements.getRuntimeTypeInfo
718 ], otherImpacts: [
719 getRuntimeTypeArgument,
720 computeSignature
721 ]);
712 } 722 }
713 723
714 BackendImpact _deferredLoading; 724 BackendImpact _deferredLoading;
715 725
716 BackendImpact get deferredLoading { 726 BackendImpact get deferredLoading {
717 return _deferredLoading ??= 727 return _deferredLoading ??=
718 new BackendImpact(globalUses: [_helpers.checkDeferredIsLoaded], 728 new BackendImpact(globalUses: [_commonElements.checkDeferredIsLoaded],
719 // Also register the types of the arguments passed to this method. 729 // Also register the types of the arguments passed to this method.
720 globalClasses: [_commonElements.stringClass]); 730 globalClasses: [_commonElements.stringClass]);
721 } 731 }
722 732
723 BackendImpact _noSuchMethodSupport; 733 BackendImpact _noSuchMethodSupport;
724 734
725 BackendImpact get noSuchMethodSupport { 735 BackendImpact get noSuchMethodSupport {
726 return _noSuchMethodSupport ??= new BackendImpact( 736 return _noSuchMethodSupport ??= new BackendImpact(
727 staticUses: [_helpers.createInvocationMirror], 737 staticUses: [_commonElements.createInvocationMirror],
728 dynamicUses: [Selectors.noSuchMethod_]); 738 dynamicUses: [Selectors.noSuchMethod_]);
729 } 739 }
730 740
731 BackendImpact _isolateSupport; 741 BackendImpact _isolateSupport;
732 742
733 /// Backend impact for isolate support. 743 /// Backend impact for isolate support.
734 BackendImpact get isolateSupport { 744 BackendImpact get isolateSupport {
735 return _isolateSupport ??= 745 return _isolateSupport ??=
736 new BackendImpact(globalUses: [_helpers.startRootIsolate]); 746 new BackendImpact(globalUses: [_commonElements.startRootIsolate]);
737 } 747 }
738 748
739 BackendImpact _isolateSupportForResolution; 749 BackendImpact _isolateSupportForResolution;
740 750
741 /// Additional backend impact for isolate support in resolution. 751 /// Additional backend impact for isolate support in resolution.
742 BackendImpact get isolateSupportForResolution { 752 BackendImpact get isolateSupportForResolution {
743 return _isolateSupportForResolution ??= new BackendImpact( 753 return _isolateSupportForResolution ??= new BackendImpact(globalUses: [
744 globalUses: [_helpers.currentIsolate, _helpers.callInIsolate]); 754 _commonElements.currentIsolate,
755 _commonElements.callInIsolate
756 ]);
745 } 757 }
746 758
747 BackendImpact _loadLibrary; 759 BackendImpact _loadLibrary;
748 760
749 /// Backend impact for accessing a `loadLibrary` function on a deferred 761 /// Backend impact for accessing a `loadLibrary` function on a deferred
750 /// prefix. 762 /// prefix.
751 BackendImpact get loadLibrary { 763 BackendImpact get loadLibrary {
752 return _loadLibrary ??= 764 return _loadLibrary ??=
753 new BackendImpact(globalUses: [_helpers.loadLibraryWrapper]); 765 new BackendImpact(globalUses: [_commonElements.loadLibraryWrapper]);
754 } 766 }
755 767
756 BackendImpact _memberClosure; 768 BackendImpact _memberClosure;
757 769
758 /// Backend impact for performing member closurization. 770 /// Backend impact for performing member closurization.
759 BackendImpact get memberClosure { 771 BackendImpact get memberClosure {
760 return _memberClosure ??= 772 return _memberClosure ??=
761 new BackendImpact(globalClasses: [_helpers.boundClosureClass]); 773 new BackendImpact(globalClasses: [_commonElements.boundClosureClass]);
762 } 774 }
763 775
764 BackendImpact _staticClosure; 776 BackendImpact _staticClosure;
765 777
766 /// Backend impact for performing closurization of a top-level or static 778 /// Backend impact for performing closurization of a top-level or static
767 /// function. 779 /// function.
768 BackendImpact get staticClosure { 780 BackendImpact get staticClosure {
769 return _staticClosure ??= 781 return _staticClosure ??=
770 new BackendImpact(globalClasses: [_helpers.closureClass]); 782 new BackendImpact(globalClasses: [_commonElements.closureClass]);
771 } 783 }
772 784
773 BackendImpact _typeVariableMirror; 785 BackendImpact _typeVariableMirror;
774 786
775 /// Backend impact for type variables through mirrors. 787 /// Backend impact for type variables through mirrors.
776 BackendImpact get typeVariableMirror { 788 BackendImpact get typeVariableMirror {
777 return _typeVariableMirror ??= new BackendImpact(staticUses: [ 789 return _typeVariableMirror ??= new BackendImpact(staticUses: [
778 _helpers.typeVariableConstructor, 790 _commonElements.typeVariableConstructor,
779 _helpers.createRuntimeType 791 _commonElements.createRuntimeType
780 ], instantiatedClasses: [ 792 ], instantiatedClasses: [
781 _helpers.typeVariableClass 793 _commonElements.typeVariableClass
782 ]); 794 ]);
783 } 795 }
784 } 796 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend_helpers.dart ('k') | pkg/compiler/lib/src/js_backend/backend_usage.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698