OLD | NEW |
---|---|
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_backend.helpers; | 5 library dart2js.js_backend.helpers; |
6 | 6 |
7 import '../common.dart'; | 7 import '../common.dart'; |
8 import '../common/names.dart' show Identifiers, Uris; | 8 import '../common/names.dart' show Identifiers, Uris; |
9 import '../common/resolution.dart' show Resolution; | 9 import '../common/resolution.dart' show Resolution; |
10 import '../compiler.dart' show Compiler; | 10 import '../compiler.dart' show Compiler; |
11 import '../core_types.dart' show CoreClasses; | 11 import '../core_types.dart' show CoreClasses; |
12 import '../elements/elements.dart' | 12 import '../elements/elements.dart' |
13 show | 13 show |
14 AbstractFieldElement, | 14 AbstractFieldElement, |
15 ClassElement, | 15 ClassElement, |
16 ConstructorElement, | 16 ConstructorElement, |
17 Element, | 17 Element, |
18 EnumClassElement, | 18 EnumClassElement, |
19 FunctionElement, | 19 FunctionElement, |
20 LibraryElement, | 20 LibraryElement, |
21 MethodElement; | 21 MethodElement, |
22 PublicName; | |
22 import '../library_loader.dart' show LoadedLibraries; | 23 import '../library_loader.dart' show LoadedLibraries; |
24 import '../universe/call_structure.dart' show CallStructure; | |
25 import '../universe/selector.dart' show Selector; | |
23 | 26 |
24 import 'js_backend.dart'; | 27 import 'js_backend.dart'; |
25 | 28 |
26 /// Helper classes and functions for the JavaScript backend. | 29 /// Helper classes and functions for the JavaScript backend. |
27 class BackendHelpers { | 30 class BackendHelpers { |
28 static final Uri DART_JS_HELPER = new Uri(scheme: 'dart', path: '_js_helper'); | 31 static final Uri DART_JS_HELPER = new Uri(scheme: 'dart', path: '_js_helper'); |
29 static final Uri DART_INTERCEPTORS = | 32 static final Uri DART_INTERCEPTORS = |
30 new Uri(scheme: 'dart', path: '_interceptors'); | 33 new Uri(scheme: 'dart', path: '_interceptors'); |
31 static final Uri DART_FOREIGN_HELPER = | 34 static final Uri DART_FOREIGN_HELPER = |
32 new Uri(scheme: 'dart', path: '_foreign_helper'); | 35 new Uri(scheme: 'dart', path: '_foreign_helper'); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
167 | 170 |
168 /// Holds the method "requiresPreamble" in _js_helper. | 171 /// Holds the method "requiresPreamble" in _js_helper. |
169 FunctionElement requiresPreambleMarker; | 172 FunctionElement requiresPreambleMarker; |
170 | 173 |
171 /// Holds the class for the [JsGetName] enum. | 174 /// Holds the class for the [JsGetName] enum. |
172 EnumClassElement jsGetNameEnum; | 175 EnumClassElement jsGetNameEnum; |
173 | 176 |
174 /// Holds the class for the [JsBuiltins] enum. | 177 /// Holds the class for the [JsBuiltins] enum. |
175 EnumClassElement jsBuiltinEnum; | 178 EnumClassElement jsBuiltinEnum; |
176 | 179 |
180 ClassElement _symbolImplementationClass; | |
181 ClassElement get symbolImplementationClass { | |
Siggi Cherem (dart-lang)
2016/04/14 15:38:20
nit - rewrite as:
ClassElement get symbolImplemen
Johnni Winther
2016/04/15 07:27:42
Done.
| |
182 if (_symbolImplementationClass == null) { | |
183 _symbolImplementationClass = find(internalLibrary, 'Symbol'); | |
184 } | |
185 return _symbolImplementationClass; | |
186 } | |
187 | |
188 final Selector symbolValidatedConstructorSelector = | |
189 new Selector.call(const PublicName('validated'), CallStructure.ONE_ARG); | |
190 | |
191 ConstructorElement _symbolValidatedConstructor; | |
192 ConstructorElement get symbolValidatedConstructor { | |
193 if (_symbolValidatedConstructor == null) { | |
194 String name = symbolValidatedConstructorSelector.name; | |
Siggi Cherem (dart-lang)
2016/04/14 15:38:20
Maybe introduce a helper method for these lookups?
Johnni Winther
2016/04/15 07:27:42
Done.
| |
195 symbolImplementationClass.ensureResolved(resolution); | |
196 _symbolValidatedConstructor = | |
197 symbolImplementationClass.lookupConstructor(name); | |
198 assert(invariant( | |
199 symbolImplementationClass, _symbolValidatedConstructor != null, | |
200 message: "Constructor '$name' not found in " | |
201 "'${symbolImplementationClass}'.")); | |
202 } | |
203 return _symbolValidatedConstructor; | |
204 } | |
205 | |
177 // TODO(johnniwinther): Make these private. | 206 // TODO(johnniwinther): Make these private. |
178 // TODO(johnniwinther): Split into findHelperFunction and findHelperClass and | 207 // TODO(johnniwinther): Split into findHelperFunction and findHelperClass and |
179 // add a check that the element has the expected kind. | 208 // add a check that the element has the expected kind. |
180 Element findHelper(String name) => find(jsHelperLibrary, name); | 209 Element findHelper(String name) => find(jsHelperLibrary, name); |
181 Element findAsyncHelper(String name) => find(asyncLibrary, name); | 210 Element findAsyncHelper(String name) => find(asyncLibrary, name); |
182 Element findInterceptor(String name) => find(interceptorsLibrary, name); | 211 Element findInterceptor(String name) => find(interceptorsLibrary, name); |
183 Element find(LibraryElement library, String name) { | 212 Element find(LibraryElement library, String name) { |
184 Element element = library.implementation.findLocal(name); | 213 Element element = library.implementation.findLocal(name); |
185 assert(invariant(library, element != null, | 214 assert(invariant(library, element != null, |
186 message: "Element '$name' not found in '${library.canonicalUri}'.")); | 215 message: "Element '$name' not found in '${library.canonicalUri}'.")); |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
673 MethodElement _objectNoSuchMethod; | 702 MethodElement _objectNoSuchMethod; |
674 | 703 |
675 MethodElement get objectNoSuchMethod { | 704 MethodElement get objectNoSuchMethod { |
676 if (_objectNoSuchMethod == null) { | 705 if (_objectNoSuchMethod == null) { |
677 _objectNoSuchMethod = | 706 _objectNoSuchMethod = |
678 coreClasses.objectClass.lookupLocalMember(Identifiers.noSuchMethod_); | 707 coreClasses.objectClass.lookupLocalMember(Identifiers.noSuchMethod_); |
679 } | 708 } |
680 return _objectNoSuchMethod; | 709 return _objectNoSuchMethod; |
681 } | 710 } |
682 } | 711 } |
OLD | NEW |