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

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

Issue 23504003: Do not do global optimizations on fields and parameters when invokeOn is enabled. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 3 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/emitter.dart
===================================================================
--- sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (revision 27024)
+++ sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (working copy)
@@ -339,9 +339,9 @@
js('var body = "return " + receiver + "." + field'),
js('prototype["${namer.getterPrefix}" + accessorName] = '
'new Function(args, body)'),
- js.if_('!reflectable', [
+ js.if_('reflectable', [
js('prototype["${namer.getterPrefix}" + accessorName].'
- '$reflectableField = false')])
+ '$reflectableField = 1')])
]),
// if (needsSetter) {
@@ -353,9 +353,9 @@
js('var body = receiver + "." + field + "$_=$_$valueParamName"'),
js('prototype["${namer.setterPrefix}" + accessorName] = '
'new Function(args, body)'),
- js.if_('!reflectable', [
+ js.if_('reflectable', [
js('prototype["${namer.setterPrefix}" + accessorName].'
- '$reflectableField = false')])
+ '$reflectableField = 1')])
]),
]),
@@ -2880,8 +2880,10 @@
String methodName = selector.invocationMirrorMemberName;
String internalName = namer.invocationMirrorInternalName(selector);
+ String reflectionName = getReflectionName(selector, internalName);
if (!haveVeryFewNoSuchMemberHandlers &&
- isTrivialNsmHandler(type, argNames, selector, internalName)) {
+ isTrivialNsmHandler(type, argNames, selector, internalName) &&
+ reflectionName == null) {
trivialNsmHandlers.add(selector);
return null;
}
@@ -2909,7 +2911,15 @@
for (String jsName in addedJsNames.keys.toList()..sort()) {
Selector selector = addedJsNames[jsName];
jsAst.Expression method = generateMethod(jsName, selector);
- if (method != null) defineStub(jsName, method);
+ if (method != null) {
+ defineStub(jsName, method);
+ String reflectionName = getReflectionName(selector, jsName);
+ if (reflectionName != null) {
+ bool accessible = compiler.world.allFunctions.filter(selector).any(
+ (Element e) => backend.isAccessibleByReflection(e));
+ defineStub('+$reflectionName', js(accessible ? '1' : '0'));
+ }
+ }
}
}
@@ -4111,8 +4121,8 @@
var previousProperty;
if (firstChar === "+") {
mangledGlobalNames[previousProperty] = property.substring(1);
- descriptor[previousProperty].''' // Break long line.
-'''$reflectableField = (descriptor[property] == 1);
+ if (descriptor[property] == 1) ''' // Break long line.
+'''descriptor[previousProperty].$reflectableField = 1;
if (element && element.length) ''' // Break long line.
'''init.interfaces[previousProperty] = element;
} else if (firstChar === "@") {
@@ -4132,8 +4142,8 @@
processStatics(init.statics[property] = element[prop]);
} else if (firstChar === "+") {
mangledNames[previousProp] = prop.substring(1);
- element[previousProp].''' // Break long line.
-'''$reflectableField = (element[prop] == 1);
+ if (element[prop] == 1) ''' // Break long line.
+'''element[previousProp].$reflectableField = 1;
} else if (firstChar === "@" && prop !== "@") {
newDesc[prop.substring(1)][$metadataField] = element[prop];
} else {

Powered by Google App Engine
This is Rietveld 408576698