Index: pkg/compiler/lib/src/js_backend/backend_helpers.dart |
diff --git a/pkg/compiler/lib/src/js_backend/backend_helpers.dart b/pkg/compiler/lib/src/js_backend/backend_helpers.dart |
index aac308d4c2f5f19dd10a04bac14a6a36f915752f..5863104a95b15c780d563a4eeb129f0a085119c1 100644 |
--- a/pkg/compiler/lib/src/js_backend/backend_helpers.dart |
+++ b/pkg/compiler/lib/src/js_backend/backend_helpers.dart |
@@ -18,8 +18,11 @@ import '../elements/elements.dart' |
EnumClassElement, |
FunctionElement, |
LibraryElement, |
- MethodElement; |
+ MethodElement, |
+ PublicName; |
import '../library_loader.dart' show LoadedLibraries; |
+import '../universe/call_structure.dart' show CallStructure; |
+import '../universe/selector.dart' show Selector; |
import 'js_backend.dart'; |
@@ -174,6 +177,28 @@ class BackendHelpers { |
/// Holds the class for the [JsBuiltins] enum. |
EnumClassElement jsBuiltinEnum; |
+ ClassElement _symbolImplementationClass; |
+ ClassElement get symbolImplementationClass { |
+ return _symbolImplementationClass ??= find(internalLibrary, 'Symbol'); |
+ } |
+ |
+ final Selector symbolValidatedConstructorSelector = |
+ new Selector.call(const PublicName('validated'), CallStructure.ONE_ARG); |
+ |
+ ConstructorElement _symbolValidatedConstructor; |
+ |
+ bool isSymbolValidatedConstructor(Element element) { |
+ if (_symbolValidatedConstructor != null) { |
+ return element == _symbolValidatedConstructor; |
+ } |
+ return false; |
+ } |
+ |
+ ConstructorElement get symbolValidatedConstructor { |
+ return _symbolValidatedConstructor ??= _findConstructor( |
+ symbolImplementationClass, symbolValidatedConstructorSelector.name); |
+ } |
+ |
// TODO(johnniwinther): Make these private. |
// TODO(johnniwinther): Split into findHelperFunction and findHelperClass and |
// add a check that the element has the expected kind. |
@@ -187,6 +212,14 @@ class BackendHelpers { |
return element; |
} |
+ ConstructorElement _findConstructor(ClassElement cls, String name) { |
+ cls.ensureResolved(resolution); |
+ ConstructorElement constructor = cls.lookupConstructor(name); |
+ assert(invariant(cls, constructor != null, |
+ message: "Constructor '$name' not found in '${cls}'.")); |
+ return constructor; |
+ } |
+ |
void onLibraryCreated(LibraryElement library) { |
Uri uri = library.canonicalUri; |
if (uri == DART_JS_HELPER) { |