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

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..b569cfce5153ffda7739dbce7cdb09c987a87049 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,8 +954,29 @@ class JavaScriptBackend extends Backend {
if (element.isTypedef()) {
typedefTypeLiterals.add(element);
}
+ registerEscapingConstructorsOfClass(element, enqueuer);
+ }
+
+
+ void registerEscapingConstructorsOfClass(ClassElement classElement,
+ Enqueuer enqueuer) {
+ // Web component classes have constructors that are escaped to the host
+ // environment.
+ classElement.ensureResolved(compiler);
kasperl 2013/10/04 11:08:43 You may want to consider if you can avoid the stat
sra1 2013/10/04 20:21:28 I'll TODO it for now. It would be nice if there w
+ if (Elements.isNativeOrExtendsNative(classElement)) {
kasperl 2013/10/04 11:08:43 I guess we are sure that we're only calling Elemen
sra1 2013/10/04 20:21:28 Added assertion in isNativeOrExtendsNative.
+ classElement.forEachMember(
+ (ClassElement enclosingClass, Element member) {
kasperl 2013/10/04 11:08:43 Maybe this would be more readable if you introduce
sra1 2013/10/04 20:21:28 Done.
+ if (member.isGenerativeConstructor()) {
+ enqueuer.registerStaticUse(member);
+ }
+ },
+ includeBackendMembers: false,
+ includeSuperAndInjectedMembers: false);
+ }
}
+
+
void registerStackTraceInCatch(TreeElements elements) {
enqueueInResolution(getTraceFromException(), elements);
}

Powered by Google App Engine
This is Rietveld 408576698