Chromium Code Reviews| Index: pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart |
| diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart |
| index c1f98bfc4fd495f3cb6d1dbafebed08ee6cffb4a..d4d8ae5fd5af6b94a5c97cb1864130cc9c6697b3 100644 |
| --- a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart |
| +++ b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart |
| @@ -234,19 +234,42 @@ class ContainerBuilder extends CodeEmitterHelper { |
| } |
| } |
| + String _tearOffNameForMember(FunctionElement member) { |
| + if (member.isInstanceMember) { |
| + return namer.getterName(member); |
| + } else { |
| + return namer.getStaticClosureName(member); |
| + } |
| + } |
| + |
| void addMemberMethod(DartMethod method, ClassBuilder builder) { |
| final FunctionElement member = method.element; |
| String name = method.name; |
| final FunctionSignature parameters = member.functionSignature; |
| jsAst.Expression code = method.code; |
| final bool needsStubs = method.needsStubs; |
| - final bool canTearOff = method.needsTearOff; |
| - final String tearOffName = method.tearOffName; |
| - final bool canBeReflected = method.canBeReflected; |
| final bool canBeApplied = method.canBeApplied; |
| + bool canTearOff = method.needsTearOff; |
| + String tearOffName = method.tearOffName; |
| final bool isClosure = method is InstanceMethod && method.isClosure; |
| final bool hasSuperAlias = method is InstanceMethod && method.hasSuperAlias; |
| + final bool canBeReflected = backend.isAccessibleByReflection(member) || |
|
floitsch
2015/01/29 15:01:22
I prefer if the comment is not on a sub-expression
herhut
2015/01/29 15:04:21
Done.
|
| + // During incremental compilation, we have to assume that reflection |
| + // *might* get enabled. |
| + compiler.hasIncrementalSupport; |
| + |
| + if (canBeReflected) { |
| + // Patch the effects of reflection into the received information. |
| + bool isNotApplyTarget = member.isConstructor || |
| + member.isAccessor || |
| + member.isOperator || |
| + isClosure; |
| + canTearOff = canTearOff || (canBeReflected && !isNotApplyTarget); |
| + tearOffName = tearOffName != null ? tearOffName |
| + : _tearOffNameForMember(member); |
| + } |
| + |
| final bool needStructuredInfo = |
| canTearOff || canBeReflected || canBeApplied || hasSuperAlias; |