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

Unified Diff: sdk/lib/_internal/compiler/implementation/js_backend/backend.dart

Issue 25675002: Generative constructor factories for native objects (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index 754e5aa0bad1b1481b6868da298300901da924c3..a60feeacebc9edaa77f50cd60e881d3098250da0 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -477,9 +477,11 @@ class JavaScriptBackend extends Backend {
}
bool isInterceptedMethod(Element element) {
- return element.isInstanceMember()
- && !element.isGenerativeConstructorBody()
- && interceptedElements[element.name] != null;
+ if (!element.isInstanceMember()) return false;
+ if (element.isGenerativeConstructorBody()) {
+ return Elements.isNativeOrExtendsNative(element.getEnclosingClass());
+ }
+ return interceptedElements[element.name] != null;
}
bool fieldHasInterceptedGetter(Element element) {
@@ -952,6 +954,30 @@ class JavaScriptBackend extends Backend {
if (element.isTypedef()) {
typedefTypeLiterals.add(element);
}
+ if (element.isClass()) {
+ // TODO(sra): Can we register via a type parameter?
+ registerEscapingConstructorsOfClass(element, enqueuer);
+ }
+ }
+
+ void registerEscapingConstructorsOfClass(ClassElement classElement,
+ Enqueuer enqueuer) {
+ // Web component classes have constructors that are escaped to the host
ngeoffray 2013/10/17 09:08:59 Please define 'escape' here.
sra1 2013/10/18 04:09:32 This code has been replaced.
+ // environment.
+ // TODO(13835): Defer registering generative constructors until the helper
+ // functions that fetch the constructors is seen. These functions are
+ // called by document.register.
+ classElement.ensureResolved(compiler);
+ if (Elements.isNativeOrExtendsNative(classElement)) {
+ registerGenerativeConstructors(ClassElement enclosing, Element member) {
+ if (member.isGenerativeConstructor()) {
+ enqueuer.registerStaticUse(member);
+ }
+ }
+ classElement.forEachMember(registerGenerativeConstructors,
+ includeBackendMembers: false,
+ includeSuperAndInjectedMembers: false);
+ }
}
void registerStackTraceInCatch(TreeElements elements) {

Powered by Google App Engine
This is Rietveld 408576698