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

Unified Diff: lib/src/compiler/code_generator.dart

Issue 1976383002: enable top-level @JS() getters (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | test/browser/language_tests.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/compiler/code_generator.dart
diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart
index d07bfb06619611d3aa7cb7238e7f19185343f0e9..59cdcca190368a0a0bc51a0879762df44e8f1b24 100644
--- a/lib/src/compiler/code_generator.dart
+++ b/lib/src/compiler/code_generator.dart
@@ -2325,6 +2325,13 @@ class CodeGenerator extends GeneralizingAstVisitor
}
JS.PropertyAccess _emitTopLevelName(Element e, {String suffix: ''}) {
+ if (e is TopLevelVariableElement &&
+ e.getter != null &&
+ findAnnotation(e.getter, isPublicJSAnnotation) != null) {
+ var annotationName = getAnnotationName(e.getter, isPublicJSAnnotation);
+ var name = js.string(annotationName ?? e.name);
+ return new JS.PropertyAccess(new JS.Identifier('self'), name);
Jennifer Messerly 2016/05/13 23:19:17 Where is "self" coming from?
Harry Terkelsen 2016/05/13 23:34:43 hmm, I've mostly been doing it because dart2js use
Jennifer Messerly 2016/05/13 23:51:07 Hmmmmm ... I don't think we have a reliable way to
Harry Terkelsen 2016/05/16 16:18:13 Done.
+ }
String name = getJSExportName(e) + suffix;
return new JS.PropertyAccess(
emitLibraryName(e.library), _propertyName(name));
@@ -2538,17 +2545,21 @@ class CodeGenerator extends GeneralizingAstVisitor
return js.call('dart.#(#, #)', [name, jsTarget, args]);
}
- jsTarget = new JS.PropertyAccess(jsTarget, memberName);
-
- if (typeArgs != null) jsTarget = new JS.Call(jsTarget, typeArgs);
-
if (DynamicInvoke.get(node.methodName)) {
// This is a dynamic call to a statically known target. For example:
// class Foo { Function bar; }
// new Foo().bar(); // dynamic call
- return js.call('dart.dcall(#, #)', [jsTarget, args]);
+ if (typeArgs != null) {
Jennifer Messerly 2016/05/13 23:19:16 just curious about the reason for this change? Ov
Harry Terkelsen 2016/05/13 23:34:43 Basically because of this line: https://github.com
Jennifer Messerly 2016/05/13 23:51:06 Thanks, makes sense :)
+ return js.call('dart.dgsend(#, #, #, #)',
Jennifer Messerly 2016/05/13 23:19:17 this code looks copy+pasted, can we share it with
Harry Terkelsen 2016/05/13 23:34:43 I merged it with the above
Jennifer Messerly 2016/05/13 23:51:06 Looks great :)
+ [jsTarget, new JS.ArrayInitializer(typeArgs), memberName, args]);
+ } else {
+ return js.call('dart.dsend(#, #, #)', [jsTarget, memberName, args]);
+ }
}
+ jsTarget = new JS.PropertyAccess(jsTarget, memberName);
+ if (typeArgs != null) jsTarget = new JS.Call(jsTarget, typeArgs);
+
return new JS.Call(jsTarget, args);
}
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | test/browser/language_tests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698