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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend_helpers.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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library dart2js.js_backend.helpers;
6
7 import '../common/names.dart' show Identifiers, Uris;
8 import '../common_elements.dart' show CommonElements, ElementEnvironment;
9 import '../elements/elements.dart' show PublicName;
10 import '../elements/entities.dart';
11 import '../library_loader.dart' show LoadedLibraries;
12 import '../universe/call_structure.dart' show CallStructure;
13 import '../universe/selector.dart' show Selector;
14 import 'constant_system_javascript.dart';
15 import 'js_backend.dart';
16
17 /// Helper classes and functions for the JavaScript backend.
18 class BackendHelpers {
19 static final Uri DART_JS_HELPER = new Uri(scheme: 'dart', path: '_js_helper');
20 static final Uri DART_INTERCEPTORS =
21 new Uri(scheme: 'dart', path: '_interceptors');
22 static final Uri DART_FOREIGN_HELPER =
23 new Uri(scheme: 'dart', path: '_foreign_helper');
24 static final Uri DART_JS_MIRRORS =
25 new Uri(scheme: 'dart', path: '_js_mirrors');
26 static final Uri DART_JS_NAMES = new Uri(scheme: 'dart', path: '_js_names');
27 static final Uri DART_EMBEDDED_NAMES =
28 new Uri(scheme: 'dart', path: '_js_embedded_names');
29 static final Uri DART_ISOLATE_HELPER =
30 new Uri(scheme: 'dart', path: '_isolate_helper');
31 static final Uri PACKAGE_JS = new Uri(scheme: 'package', path: 'js/js.dart');
32
33 static const String INVOKE_ON = '_getCachedInvocation';
34 static const String START_ROOT_ISOLATE = 'startRootIsolate';
35
36 static const String JS = 'JS';
37 static const String JS_BUILTIN = 'JS_BUILTIN';
38 static const String JS_EMBEDDED_GLOBAL = 'JS_EMBEDDED_GLOBAL';
39 static const String JS_INTERCEPTOR_CONSTANT = 'JS_INTERCEPTOR_CONSTANT';
40
41 final ElementEnvironment _env;
42
43 final CommonElements commonElements;
44
45 BackendHelpers(this._env, this.commonElements);
46
47 ClassEntity _findInterceptorsClass(String name) =>
48 _findClass(interceptorsLibrary, name);
49
50 FunctionEntity _findInterceptorsFunction(String name) =>
51 _findLibraryMember(interceptorsLibrary, name);
52
53 ClassEntity _findHelperClass(String name) =>
54 _findClass(jsHelperLibrary, name);
55
56 // TODO(johnniwinther): Avoid the need for this (from [CheckedModeHelper]).
57 FunctionEntity findHelperFunction(String name) => _findHelperFunction(name);
58
59 FunctionEntity _findHelperFunction(String name) =>
60 _findLibraryMember(jsHelperLibrary, name);
61
62 ClassEntity _findAsyncHelperClass(String name) =>
63 _findClass(asyncLibrary, name);
64
65 FunctionEntity _findAsyncHelperFunction(String name) =>
66 _findLibraryMember(asyncLibrary, name);
67
68 FunctionEntity _findMirrorsFunction(String name) {
69 LibraryEntity library = _env.lookupLibrary(DART_JS_MIRRORS);
70 if (library == null) return null;
71 return _env.lookupLibraryMember(library, name, required: true);
72 }
73
74 ClassEntity _findClass(LibraryEntity library, String name) {
75 return _env.lookupClass(library, name, required: true);
76 }
77
78 MemberEntity _findClassMember(ClassEntity cls, String name) {
79 return _env.lookupClassMember(cls, name, required: true);
80 }
81
82 MemberEntity _findLibraryMember(LibraryEntity library, String name) {
83 return _env.lookupLibraryMember(library, name, required: true);
84 }
85
86 FunctionEntity findCoreHelper(String name) => _env
87 .lookupLibraryMember(commonElements.coreLibrary, name, required: true);
88
89 ConstructorEntity _findConstructor(ClassEntity cls, String name) =>
90 _env.lookupConstructor(cls, name, required: true);
91
92 void onLibrariesLoaded(LoadedLibraries loadedLibraries) {
93 assert(loadedLibraries.containsLibrary(Uris.dart_core));
94 assert(loadedLibraries.containsLibrary(DART_INTERCEPTORS));
95 assert(loadedLibraries.containsLibrary(DART_JS_HELPER));
96 }
97
98 void onResolutionStart() {
99 // TODO(johnniwinther): Avoid these. Currently needed to ensure resolution
100 // of the classes for various queries in native behavior computation,
101 // inference and codegen.
102 _env.getThisType(jsArrayClass);
103 _env.getThisType(jsExtendableArrayClass);
104 }
105
106 LibraryEntity _jsHelperLibrary;
107 LibraryEntity get jsHelperLibrary =>
108 _jsHelperLibrary ??= _env.lookupLibrary(DART_JS_HELPER);
109
110 LibraryEntity _asyncLibrary;
111 LibraryEntity get asyncLibrary =>
112 _asyncLibrary ??= _env.lookupLibrary(Uris.dart_async);
113
114 LibraryEntity _interceptorsLibrary;
115 LibraryEntity get interceptorsLibrary =>
116 _interceptorsLibrary ??= _env.lookupLibrary(DART_INTERCEPTORS);
117
118 LibraryEntity _foreignLibrary;
119 LibraryEntity get foreignLibrary =>
120 _foreignLibrary ??= _env.lookupLibrary(DART_FOREIGN_HELPER);
121
122 LibraryEntity _isolateHelperLibrary;
123 LibraryEntity get isolateHelperLibrary =>
124 _isolateHelperLibrary ??= _env.lookupLibrary(DART_ISOLATE_HELPER);
125
126 /// Reference to the internal library to lookup functions to always inline.
127 LibraryEntity _internalLibrary;
128 LibraryEntity get internalLibrary =>
129 _internalLibrary ??= _env.lookupLibrary(Uris.dart__internal);
130
131 FunctionEntity _assertTest;
132 FunctionEntity get assertTest =>
133 _assertTest ??= _findHelperFunction('assertTest');
134
135 FunctionEntity _assertThrow;
136 FunctionEntity get assertThrow =>
137 _assertThrow ??= _findHelperFunction('assertThrow');
138
139 FunctionEntity _assertHelper;
140 FunctionEntity get assertHelper =>
141 _assertHelper ??= _findHelperFunction('assertHelper');
142
143 FunctionEntity _assertUnreachableMethod;
144 FunctionEntity get assertUnreachableMethod =>
145 _assertUnreachableMethod ??= _findHelperFunction('assertUnreachable');
146
147 ClassEntity _closureClass;
148 ClassEntity get closureClass => _closureClass ??= _findHelperClass('Closure');
149
150 ClassEntity _boundClosureClass;
151 ClassEntity get boundClosureClass =>
152 _boundClosureClass ??= _findHelperClass('BoundClosure');
153
154 FunctionEntity _invokeOnMethod;
155 FunctionEntity get invokeOnMethod => _invokeOnMethod ??=
156 _env.lookupClassMember(jsInvocationMirrorClass, INVOKE_ON);
157
158 ClassEntity _jsInterceptorClass;
159 ClassEntity get jsInterceptorClass =>
160 _jsInterceptorClass ??= _findInterceptorsClass('Interceptor');
161
162 ClassEntity _jsStringClass;
163 ClassEntity get jsStringClass =>
164 _jsStringClass ??= _findInterceptorsClass('JSString');
165
166 ClassEntity _jsArrayClass;
167 ClassEntity get jsArrayClass =>
168 _jsArrayClass ??= _findInterceptorsClass('JSArray');
169
170 ClassEntity _jsNumberClass;
171 ClassEntity get jsNumberClass =>
172 _jsNumberClass ??= _findInterceptorsClass('JSNumber');
173
174 ClassEntity _jsIntClass;
175 ClassEntity get jsIntClass => _jsIntClass ??= _findInterceptorsClass('JSInt');
176
177 ClassEntity _jsDoubleClass;
178 ClassEntity get jsDoubleClass =>
179 _jsDoubleClass ??= _findInterceptorsClass('JSDouble');
180
181 ClassEntity _jsNullClass;
182 ClassEntity get jsNullClass =>
183 _jsNullClass ??= _findInterceptorsClass('JSNull');
184
185 ClassEntity _jsBoolClass;
186 ClassEntity get jsBoolClass =>
187 _jsBoolClass ??= _findInterceptorsClass('JSBool');
188
189 ClassEntity _jsPlainJavaScriptObjectClass;
190 ClassEntity get jsPlainJavaScriptObjectClass =>
191 _jsPlainJavaScriptObjectClass ??=
192 _findInterceptorsClass('PlainJavaScriptObject');
193
194 ClassEntity _jsUnknownJavaScriptObjectClass;
195 ClassEntity get jsUnknownJavaScriptObjectClass =>
196 _jsUnknownJavaScriptObjectClass ??=
197 _findInterceptorsClass('UnknownJavaScriptObject');
198
199 ClassEntity _jsJavaScriptFunctionClass;
200 ClassEntity get jsJavaScriptFunctionClass => _jsJavaScriptFunctionClass ??=
201 _findInterceptorsClass('JavaScriptFunction');
202
203 ClassEntity _jsJavaScriptObjectClass;
204 ClassEntity get jsJavaScriptObjectClass =>
205 _jsJavaScriptObjectClass ??= _findInterceptorsClass('JavaScriptObject');
206
207 ClassEntity _jsIndexableClass;
208 ClassEntity get jsIndexableClass =>
209 _jsIndexableClass ??= _findInterceptorsClass('JSIndexable');
210
211 ClassEntity _jsMutableIndexableClass;
212 ClassEntity get jsMutableIndexableClass =>
213 _jsMutableIndexableClass ??= _findInterceptorsClass('JSMutableIndexable');
214
215 ClassEntity _jsMutableArrayClass;
216 ClassEntity get jsMutableArrayClass =>
217 _jsMutableArrayClass ??= _findInterceptorsClass('JSMutableArray');
218
219 ClassEntity _jsFixedArrayClass;
220 ClassEntity get jsFixedArrayClass =>
221 _jsFixedArrayClass ??= _findInterceptorsClass('JSFixedArray');
222
223 ClassEntity _jsExtendableArrayClass;
224 ClassEntity get jsExtendableArrayClass =>
225 _jsExtendableArrayClass ??= _findInterceptorsClass('JSExtendableArray');
226
227 ClassEntity _jsUnmodifiableArrayClass;
228 ClassEntity get jsUnmodifiableArrayClass => _jsUnmodifiableArrayClass ??=
229 _findInterceptorsClass('JSUnmodifiableArray');
230
231 ClassEntity _jsPositiveIntClass;
232 ClassEntity get jsPositiveIntClass =>
233 _jsPositiveIntClass ??= _findInterceptorsClass('JSPositiveInt');
234
235 ClassEntity _jsUInt32Class;
236 ClassEntity get jsUInt32Class =>
237 _jsUInt32Class ??= _findInterceptorsClass('JSUInt32');
238
239 ClassEntity _jsUInt31Class;
240 ClassEntity get jsUInt31Class =>
241 _jsUInt31Class ??= _findInterceptorsClass('JSUInt31');
242
243 MemberEntity _jsIndexableLength;
244 MemberEntity get jsIndexableLength =>
245 _jsIndexableLength ??= _findClassMember(jsIndexableClass, 'length');
246
247 ConstructorEntity _jsArrayTypedConstructor;
248 ConstructorEntity get jsArrayTypedConstructor =>
249 _jsArrayTypedConstructor ??= _findConstructor(jsArrayClass, 'typed');
250
251 FunctionEntity _jsArrayRemoveLast;
252 FunctionEntity get jsArrayRemoveLast =>
253 _jsArrayRemoveLast ??= _findClassMember(jsArrayClass, 'removeLast');
254
255 FunctionEntity _jsArrayAdd;
256 FunctionEntity get jsArrayAdd =>
257 _jsArrayAdd ??= _findClassMember(jsArrayClass, 'add');
258
259 FunctionEntity _jsStringSplit;
260 FunctionEntity get jsStringSplit =>
261 _jsStringSplit ??= _findClassMember(jsStringClass, 'split');
262
263 FunctionEntity _jsStringToString;
264 FunctionEntity get jsStringToString =>
265 _jsStringToString ??= _findClassMember(jsStringClass, 'toString');
266
267 FunctionEntity _jsStringOperatorAdd;
268 FunctionEntity get jsStringOperatorAdd =>
269 _jsStringOperatorAdd ??= _findClassMember(jsStringClass, '+');
270
271 FunctionEntity _objectEquals;
272 FunctionEntity get objectEquals =>
273 _objectEquals ??= _findClassMember(commonElements.objectClass, '==');
274
275 ClassEntity _typeLiteralClass;
276 ClassEntity get typeLiteralClass =>
277 _typeLiteralClass ??= _findHelperClass('TypeImpl');
278
279 ClassEntity _mapLiteralClass;
280 ClassEntity get mapLiteralClass {
281 if (_mapLiteralClass == null) {
282 _mapLiteralClass =
283 _env.lookupClass(commonElements.coreLibrary, 'LinkedHashMap');
284 if (_mapLiteralClass == null) {
285 _mapLiteralClass = _findClass(
286 _env.lookupLibrary(Uris.dart_collection), 'LinkedHashMap');
287 }
288 }
289 return _mapLiteralClass;
290 }
291
292 ClassEntity _constMapLiteralClass;
293 ClassEntity get constMapLiteralClass =>
294 _constMapLiteralClass ??= _findHelperClass('ConstantMap');
295
296 ClassEntity _typeVariableClass;
297 ClassEntity get typeVariableClass =>
298 _typeVariableClass ??= _findHelperClass('TypeVariable');
299
300 ConstructorEntity _typeVariableConstructor;
301 ConstructorEntity get typeVariableConstructor => _typeVariableConstructor ??=
302 _env.lookupConstructor(typeVariableClass, '');
303
304 ClassEntity _noSideEffectsClass;
305 ClassEntity get noSideEffectsClass =>
306 _noSideEffectsClass ??= _findHelperClass('NoSideEffects');
307
308 ClassEntity _noThrowsClass;
309 ClassEntity get noThrowsClass =>
310 _noThrowsClass ??= _findHelperClass('NoThrows');
311
312 ClassEntity _noInlineClass;
313 ClassEntity get noInlineClass =>
314 _noInlineClass ??= _findHelperClass('NoInline');
315
316 ClassEntity _forceInlineClass;
317 ClassEntity get forceInlineClass =>
318 _forceInlineClass ??= _findHelperClass('ForceInline');
319
320 ClassEntity _irRepresentationClass;
321 ClassEntity get irRepresentationClass =>
322 _irRepresentationClass ??= _findHelperClass('IrRepresentation');
323
324 ClassEntity _jsAnnotationClass;
325 ClassEntity get jsAnnotationClass {
326 if (_jsAnnotationClass == null) {
327 LibraryEntity library = _env.lookupLibrary(PACKAGE_JS);
328 if (library == null) return null;
329 _jsAnnotationClass = _findClass(library, 'JS');
330 }
331 return _jsAnnotationClass;
332 }
333
334 ClassEntity _jsAnonymousClass;
335 ClassEntity get jsAnonymousClass {
336 if (_jsAnonymousClass == null) {
337 LibraryEntity library = _env.lookupLibrary(PACKAGE_JS);
338 if (library == null) return null;
339 _jsAnonymousClass = _findClass(library, '_Anonymous');
340 }
341 return _jsAnonymousClass;
342 }
343
344 FunctionEntity _getInterceptorMethod;
345 FunctionEntity get getInterceptorMethod =>
346 _getInterceptorMethod ??= _findInterceptorsFunction('getInterceptor');
347
348 ClassEntity _jsInvocationMirrorClass;
349 ClassEntity get jsInvocationMirrorClass =>
350 _jsInvocationMirrorClass ??= _findHelperClass('JSInvocationMirror');
351
352 ClassEntity _typedArrayClass;
353 ClassEntity get typedArrayClass => _typedArrayClass ??= _findClass(
354 _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
355 'NativeTypedArray');
356
357 ClassEntity _typedArrayOfIntClass;
358 ClassEntity get typedArrayOfIntClass => _typedArrayOfIntClass ??= _findClass(
359 _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
360 'NativeTypedArrayOfInt');
361
362 /**
363 * Interface used to determine if an object has the JavaScript
364 * indexing behavior. The interface is only visible to specific
365 * libraries.
366 */
367 ClassEntity _jsIndexingBehaviorInterface;
368 ClassEntity get jsIndexingBehaviorInterface =>
369 _jsIndexingBehaviorInterface ??=
370 _findHelperClass('JavaScriptIndexingBehavior');
371
372 FunctionEntity _getNativeInterceptorMethod;
373 FunctionEntity get getNativeInterceptorMethod =>
374 _getNativeInterceptorMethod ??=
375 _findInterceptorsFunction('getNativeInterceptor');
376
377 /// Holds the method "getIsolateAffinityTag" when dart:_js_helper has been
378 /// loaded.
379 FunctionEntity _getIsolateAffinityTagMarker;
380 FunctionEntity get getIsolateAffinityTagMarker =>
381 _getIsolateAffinityTagMarker ??=
382 _findHelperFunction('getIsolateAffinityTag');
383
384 /// Holds the method "disableTreeShaking" in js_mirrors when
385 /// dart:mirrors has been loaded.
386 FunctionEntity _disableTreeShakingMarker;
387 FunctionEntity get disableTreeShakingMarker =>
388 _disableTreeShakingMarker ??= _findMirrorsFunction('disableTreeShaking');
389
390 /// Holds the method "preserveNames" in js_mirrors when
391 /// dart:mirrors has been loaded.
392 FunctionEntity _preserveNamesMarker;
393 FunctionEntity get preserveNamesMarker {
394 if (_preserveNamesMarker == null) {
395 LibraryEntity library = _env.lookupLibrary(DART_JS_NAMES);
396 if (library != null) {
397 _preserveNamesMarker = _findLibraryMember(library, 'preserveNames');
398 }
399 }
400 return _preserveNamesMarker;
401 }
402
403 /// Holds the method "preserveMetadata" in js_mirrors when
404 /// dart:mirrors has been loaded.
405 FunctionEntity _preserveMetadataMarker;
406 FunctionEntity get preserveMetadataMarker =>
407 _preserveMetadataMarker ??= _findMirrorsFunction('preserveMetadata');
408
409 /// Holds the method "preserveUris" in js_mirrors when
410 /// dart:mirrors has been loaded.
411 FunctionEntity _preserveUrisMarker;
412 FunctionEntity get preserveUrisMarker =>
413 _preserveUrisMarker ??= _findMirrorsFunction('preserveUris');
414
415 /// Holds the method "preserveLibraryNames" in js_mirrors when
416 /// dart:mirrors has been loaded.
417 FunctionEntity _preserveLibraryNamesMarker;
418 FunctionEntity get preserveLibraryNamesMarker =>
419 _preserveLibraryNamesMarker ??=
420 _findMirrorsFunction('preserveLibraryNames');
421
422 /// Holds the method "requiresPreamble" in _js_helper.
423 FunctionEntity _requiresPreambleMarker;
424 FunctionEntity get requiresPreambleMarker =>
425 _requiresPreambleMarker ??= _findHelperFunction('requiresPreamble');
426
427 /// Holds the class for the [JsGetName] enum.
428 ClassEntity _jsGetNameEnum;
429 ClassEntity get jsGetNameEnum => _jsGetNameEnum ??= _findClass(
430 _env.lookupLibrary(DART_EMBEDDED_NAMES, required: true), 'JsGetName');
431
432 /// Holds the class for the [JsBuiltins] enum.
433 ClassEntity _jsBuiltinEnum;
434 ClassEntity get jsBuiltinEnum => _jsBuiltinEnum ??= _findClass(
435 _env.lookupLibrary(DART_EMBEDDED_NAMES, required: true), 'JsBuiltin');
436
437 final Selector symbolValidatedConstructorSelector =
438 new Selector.call(const PublicName('validated'), CallStructure.ONE_ARG);
439
440 ConstructorEntity get symbolValidatedConstructor =>
441 _symbolValidatedConstructor ??= _findConstructor(
442 symbolImplementationClass, symbolValidatedConstructorSelector.name);
443
444 ClassEntity _symbolImplementationClass;
445 ClassEntity get symbolImplementationClass =>
446 _symbolImplementationClass ??= _findClass(internalLibrary, 'Symbol');
447
448 FieldEntity _symbolImplementationField;
449
450 /// Returns the field that holds the internal name in the implementation class
451 /// for `Symbol`.
452 FieldEntity get symbolImplementationField => _symbolImplementationField ??=
453 _env.lookupClassMember(symbolImplementationClass, '_name',
454 required: true);
455
456 ConstructorEntity _symbolValidatedConstructor;
457
458 bool isSymbolValidatedConstructor(ConstructorEntity element) {
459 if (_symbolValidatedConstructor != null) {
460 return element == _symbolValidatedConstructor;
461 }
462 return false;
463 }
464
465 ConstructorEntity _mapLiteralConstructor;
466 ConstructorEntity _mapLiteralConstructorEmpty;
467 FunctionEntity _mapLiteralUntypedMaker;
468 FunctionEntity _mapLiteralUntypedEmptyMaker;
469
470 ConstructorEntity get mapLiteralConstructor {
471 _ensureMapLiteralHelpers();
472 return _mapLiteralConstructor;
473 }
474
475 ConstructorEntity get mapLiteralConstructorEmpty {
476 _ensureMapLiteralHelpers();
477 return _mapLiteralConstructorEmpty;
478 }
479
480 FunctionEntity get mapLiteralUntypedMaker {
481 _ensureMapLiteralHelpers();
482 return _mapLiteralUntypedMaker;
483 }
484
485 FunctionEntity get mapLiteralUntypedEmptyMaker {
486 _ensureMapLiteralHelpers();
487 return _mapLiteralUntypedEmptyMaker;
488 }
489
490 void _ensureMapLiteralHelpers() {
491 if (_mapLiteralConstructor != null) return;
492
493 _mapLiteralConstructor =
494 _env.lookupConstructor(mapLiteralClass, '_literal');
495 _mapLiteralConstructorEmpty =
496 _env.lookupConstructor(mapLiteralClass, '_empty');
497 _mapLiteralUntypedMaker =
498 _env.lookupClassMember(mapLiteralClass, '_makeLiteral');
499 _mapLiteralUntypedEmptyMaker =
500 _env.lookupClassMember(mapLiteralClass, '_makeEmpty');
501 }
502
503 FunctionEntity get badMain {
504 return _findHelperFunction('badMain');
505 }
506
507 FunctionEntity get missingMain {
508 return _findHelperFunction('missingMain');
509 }
510
511 FunctionEntity get mainHasTooManyParameters {
512 return _findHelperFunction('mainHasTooManyParameters');
513 }
514
515 FunctionEntity get loadLibraryWrapper {
516 return _findHelperFunction("_loadLibraryWrapper");
517 }
518
519 FunctionEntity get boolConversionCheck {
520 return _findHelperFunction('boolConversionCheck');
521 }
522
523 FunctionEntity _traceHelper;
524
525 FunctionEntity get traceHelper {
526 return _traceHelper ??= JavaScriptBackend.TRACE_METHOD == 'console'
527 ? _consoleTraceHelper
528 : _postTraceHelper;
529 }
530
531 FunctionEntity get _consoleTraceHelper =>
532 _findHelperFunction('consoleTraceHelper');
533
534 FunctionEntity get _postTraceHelper => _findHelperFunction('postTraceHelper');
535
536 FunctionEntity get closureFromTearOff =>
537 _findHelperFunction('closureFromTearOff');
538
539 FunctionEntity get isJsIndexable => _findHelperFunction('isJsIndexable');
540
541 FunctionEntity get throwIllegalArgumentException =>
542 _findHelperFunction('iae');
543
544 FunctionEntity get throwIndexOutOfRangeException =>
545 _findHelperFunction('ioore');
546
547 FunctionEntity get exceptionUnwrapper =>
548 _findHelperFunction('unwrapException');
549
550 FunctionEntity get throwRuntimeError =>
551 _findHelperFunction('throwRuntimeError');
552
553 FunctionEntity get throwTypeError => _findHelperFunction('throwTypeError');
554
555 FunctionEntity get throwAbstractClassInstantiationError =>
556 _findHelperFunction('throwAbstractClassInstantiationError');
557
558 FunctionEntity _cachedCheckConcurrentModificationError;
559 FunctionEntity get checkConcurrentModificationError =>
560 _cachedCheckConcurrentModificationError ??=
561 _findHelperFunction('checkConcurrentModificationError');
562
563 FunctionEntity get throwConcurrentModificationError =>
564 _findHelperFunction('throwConcurrentModificationError');
565
566 FunctionEntity _checkInt;
567 FunctionEntity get checkInt => _checkInt ??= _findHelperFunction('checkInt');
568
569 FunctionEntity _checkNum;
570 FunctionEntity get checkNum => _checkNum ??= _findHelperFunction('checkNum');
571
572 FunctionEntity _checkString;
573 FunctionEntity get checkString =>
574 _checkString ??= _findHelperFunction('checkString');
575
576 FunctionEntity get stringInterpolationHelper => _findHelperFunction('S');
577
578 FunctionEntity get wrapExceptionHelper =>
579 _findHelperFunction('wrapException');
580
581 FunctionEntity get throwExpressionHelper =>
582 _findHelperFunction('throwExpression');
583
584 FunctionEntity get closureConverter =>
585 _findHelperFunction('convertDartClosureToJS');
586
587 FunctionEntity get traceFromException =>
588 _findHelperFunction('getTraceFromException');
589
590 FunctionEntity get setRuntimeTypeInfo =>
591 _findHelperFunction('setRuntimeTypeInfo');
592
593 FunctionEntity get getRuntimeTypeInfo =>
594 _findHelperFunction('getRuntimeTypeInfo');
595
596 FunctionEntity get getTypeArgumentByIndex =>
597 _findHelperFunction('getTypeArgumentByIndex');
598
599 FunctionEntity get computeSignature =>
600 _findHelperFunction('computeSignature');
601
602 FunctionEntity get getRuntimeTypeArguments =>
603 _findHelperFunction('getRuntimeTypeArguments');
604
605 FunctionEntity get getRuntimeTypeArgument =>
606 _findHelperFunction('getRuntimeTypeArgument');
607
608 FunctionEntity get runtimeTypeToString =>
609 _findHelperFunction('runtimeTypeToString');
610
611 FunctionEntity get assertIsSubtype => _findHelperFunction('assertIsSubtype');
612
613 FunctionEntity get checkSubtype => _findHelperFunction('checkSubtype');
614
615 FunctionEntity get assertSubtype => _findHelperFunction('assertSubtype');
616
617 FunctionEntity get subtypeCast => _findHelperFunction('subtypeCast');
618
619 FunctionEntity get functionTypeTest =>
620 _findHelperFunction('functionTypeTest');
621
622 FunctionEntity get checkSubtypeOfRuntimeType =>
623 _findHelperFunction('checkSubtypeOfRuntimeType');
624
625 FunctionEntity get assertSubtypeOfRuntimeType =>
626 _findHelperFunction('assertSubtypeOfRuntimeType');
627
628 FunctionEntity get subtypeOfRuntimeTypeCast =>
629 _findHelperFunction('subtypeOfRuntimeTypeCast');
630
631 FunctionEntity get checkDeferredIsLoaded =>
632 _findHelperFunction('checkDeferredIsLoaded');
633
634 FunctionEntity get throwNoSuchMethod =>
635 _findHelperFunction('throwNoSuchMethod');
636
637 FunctionEntity get malformedTypeError =>
638 _cachedCoreHelper('_malformedTypeError');
639 FunctionEntity get genericNoSuchMethod =>
640 _cachedCoreHelper('_genericNoSuchMethod');
641 FunctionEntity get unresolvedConstructorError =>
642 _cachedCoreHelper('_unresolvedConstructorError');
643 FunctionEntity get unresolvedStaticGetterError =>
644 _cachedCoreHelper('_unresolvedStaticGetterError');
645 FunctionEntity get unresolvedStaticSetterError =>
646 _cachedCoreHelper('_unresolvedStaticSetterError');
647 FunctionEntity get unresolvedStaticMethodError =>
648 _cachedCoreHelper('_unresolvedStaticMethodError');
649 FunctionEntity get unresolvedTopLevelGetterError =>
650 _cachedCoreHelper('_unresolvedTopLevelGetterError');
651 FunctionEntity get unresolvedTopLevelSetterError =>
652 _cachedCoreHelper('_unresolvedTopLevelSetterError');
653 FunctionEntity get unresolvedTopLevelMethodError =>
654 _cachedCoreHelper('_unresolvedTopLevelMethodError');
655
656 Map<String, FunctionEntity> _cachedCoreHelpers = <String, FunctionEntity>{};
657 FunctionEntity _cachedCoreHelper(String name) =>
658 _cachedCoreHelpers[name] ??= findCoreHelper(name);
659
660 FunctionEntity get createRuntimeType =>
661 _findHelperFunction('createRuntimeType');
662
663 FunctionEntity get fallThroughError =>
664 _findHelperFunction("getFallThroughError");
665
666 FunctionEntity get createInvocationMirror =>
667 _findHelperFunction('createInvocationMirror');
668
669 FunctionEntity get cyclicThrowHelper =>
670 _findHelperFunction("throwCyclicInit");
671
672 FunctionEntity get asyncHelper => _findAsyncHelperFunction("_asyncHelper");
673
674 FunctionEntity get wrapBody =>
675 _findAsyncHelperFunction("_wrapJsFunctionForAsync");
676
677 FunctionEntity get yieldStar => _env.lookupClassMember(
678 _findAsyncHelperClass("_IterationMarker"), "yieldStar");
679
680 FunctionEntity get yieldSingle => _env.lookupClassMember(
681 _findAsyncHelperClass("_IterationMarker"), "yieldSingle");
682
683 FunctionEntity get syncStarUncaughtError => _env.lookupClassMember(
684 _findAsyncHelperClass("_IterationMarker"), "uncaughtError");
685
686 FunctionEntity get asyncStarHelper =>
687 _findAsyncHelperFunction("_asyncStarHelper");
688
689 FunctionEntity get streamOfController =>
690 _findAsyncHelperFunction("_streamOfController");
691
692 FunctionEntity get endOfIteration => _env.lookupClassMember(
693 _findAsyncHelperClass("_IterationMarker"), "endOfIteration");
694
695 ClassEntity get syncStarIterable =>
696 _findAsyncHelperClass("_SyncStarIterable");
697
698 ClassEntity get futureImplementation => _findAsyncHelperClass('_Future');
699
700 ClassEntity get controllerStream =>
701 _findAsyncHelperClass("_ControllerStream");
702
703 ConstructorEntity get syncStarIterableConstructor =>
704 _env.lookupConstructor(syncStarIterable, "");
705
706 ConstructorEntity get syncCompleterConstructor =>
707 _env.lookupConstructor(_findAsyncHelperClass("Completer"), "sync");
708
709 ClassEntity get asyncStarController =>
710 _findAsyncHelperClass("_AsyncStarStreamController");
711
712 ConstructorEntity get asyncStarControllerConstructor =>
713 _env.lookupConstructor(asyncStarController, "", required: true);
714
715 ConstructorEntity get streamIteratorConstructor =>
716 _env.lookupConstructor(_findAsyncHelperClass("StreamIterator"), "");
717
718 ClassEntity get VoidRuntimeType => _findHelperClass('VoidRuntimeType');
719
720 FunctionEntity get defineProperty => _findHelperFunction('defineProperty');
721
722 FunctionEntity get startRootIsolate =>
723 _findLibraryMember(isolateHelperLibrary, START_ROOT_ISOLATE);
724
725 FunctionEntity get currentIsolate =>
726 _findLibraryMember(isolateHelperLibrary, '_currentIsolate');
727
728 FunctionEntity get callInIsolate =>
729 _findLibraryMember(isolateHelperLibrary, '_callInIsolate');
730
731 FunctionEntity _findIndexForNativeSubclassType;
732 FunctionEntity get findIndexForNativeSubclassType =>
733 _findIndexForNativeSubclassType ??= _findLibraryMember(
734 interceptorsLibrary, 'findIndexForNativeSubclassType');
735
736 FunctionEntity get convertRtiToRuntimeType =>
737 _findHelperFunction('convertRtiToRuntimeType');
738
739 ClassEntity get stackTraceClass => _findHelperClass('_StackTrace');
740
741 FunctionEntity _objectNoSuchMethod;
742 FunctionEntity get objectNoSuchMethod {
743 return _objectNoSuchMethod ??= _env.lookupClassMember(
744 commonElements.objectClass, Identifiers.noSuchMethod_);
745 }
746
747 bool isDefaultNoSuchMethodImplementation(FunctionEntity element) {
748 ClassEntity classElement = element.enclosingClass;
749 return classElement == commonElements.objectClass ||
750 classElement == jsInterceptorClass ||
751 classElement == jsNullClass;
752 }
753
754 ClassEntity get constantMapClass =>
755 _findHelperClass(JavaScriptMapConstant.DART_CLASS);
756 ClassEntity get constantStringMapClass =>
757 _findHelperClass(JavaScriptMapConstant.DART_STRING_CLASS);
758 ClassEntity get constantProtoMapClass =>
759 _findHelperClass(JavaScriptMapConstant.DART_PROTO_CLASS);
760 ClassEntity get generalConstantMapClass =>
761 _findHelperClass(JavaScriptMapConstant.DART_GENERAL_CLASS);
762
763 ClassEntity get annotationCreatesClass => _findHelperClass('Creates');
764
765 ClassEntity get annotationReturnsClass => _findHelperClass('Returns');
766
767 ClassEntity get annotationJSNameClass => _findHelperClass('JSName');
768
769 FunctionEntity get toStringForNativeObject =>
770 _findHelperFunction('toStringForNativeObject');
771
772 FunctionEntity get hashCodeForNativeObject =>
773 _findHelperFunction('hashCodeForNativeObject');
774
775 ClassEntity _patchAnnotationClass;
776
777 /// The class for patch annotations defined in dart:_js_helper.
778 ClassEntity get patchAnnotationClass =>
779 _patchAnnotationClass ??= _findHelperClass('_Patch');
780
781 ClassEntity _nativeAnnotationClass;
782
783 /// The class for native annotations defined in dart:_js_helper.
784 ClassEntity get nativeAnnotationClass =>
785 _nativeAnnotationClass ??= _findHelperClass('Native');
786 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_backend/backend_impact.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698