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

Unified Diff: sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart

Issue 273723003: Assume a method can be torn off, if it's accessible through reflection. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add test. Created 6 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 | « no previous file | tests/lib/mirrors/get_field_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
index 379d68721cdf0b6c0641634d8d4376c2ffecea6e..3f5177bf59e7d8c672e7996bf9c3120c6247a879 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
@@ -359,6 +359,9 @@ class ContainerBuilder extends CodeEmitterHelper {
member.isConstructor ||
member.isAccessor;
String tearOffName;
+
+ final bool canBeReflected = backend.isAccessibleByReflection(member);
+
if (isNotApplyTarget) {
canTearOff = false;
} else if (member.isInstanceMember) {
@@ -367,19 +370,21 @@ class ContainerBuilder extends CodeEmitterHelper {
isClosure = true;
} else {
// Careful with operators.
- canTearOff = compiler.codegenWorld.hasInvokedGetter(member, compiler);
+ canTearOff =
+ compiler.codegenWorld.hasInvokedGetter(member, compiler) ||
+ canBeReflected;
assert(!needsSuperGetter(member) || canTearOff);
tearOffName = namer.getterName(member);
}
} else {
canTearOff =
- compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member);
+ compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member) ||
herhut 2014/05/08 14:21:55 long line
floitsch 2014/05/08 15:40:14 Not for me.
+ canBeReflected;
tearOffName = namer.getStaticClosureName(member);
}
final bool canBeApplied = compiler.enabledFunctionApply &&
compiler.world.getMightBePassedToApply(member);
- final bool canBeReflected = backend.isAccessibleByReflection(member);
final bool needStructuredInfo =
canTearOff || canBeReflected || canBeApplied;
if (!needStructuredInfo) {
« no previous file with comments | « no previous file | tests/lib/mirrors/get_field_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698