| Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| index 1ebb578d2635a53beb60969f7b8d5d76255c2bab..f55026a806851c867fee259d14676437a3f09cb9 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
|
| @@ -326,9 +326,11 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| bool needsStubs = !parameters.optionalParameters.isEmpty;
|
| bool canTearOff = false;
|
| bool isClosure = false;
|
| + bool canBeApplied = compiler.enabledFunctionApply;
|
| String tearOffName;
|
| if (!member.isFunction() || member.isConstructor() || member.isAccessor()) {
|
| canTearOff = false;
|
| + canBeApplied = false;
|
| } else if (member.isInstanceMember()) {
|
| if (member.getEnclosingClass().isClosure()) {
|
| canTearOff = false;
|
| @@ -346,7 +348,7 @@ class ContainerBuilder extends CodeEmitterHelper {
|
|
|
| bool canBeReflected = backend.isAccessibleByReflection(member);
|
| bool needStructuredInfo =
|
| - canTearOff || canBeReflected || compiler.enabledFunctionApply;
|
| + canTearOff || canBeReflected || canBeApplied;
|
| if (!needStructuredInfo) {
|
| builder.addProperty(name, code);
|
| if (needsStubs) {
|
| @@ -449,9 +451,14 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| }
|
|
|
| jsAst.Expression memberTypeExpression;
|
| - if ((canTearOff || canBeReflected) &&
|
| - !member.isGenerativeConstructorBody()) {
|
| - DartType memberType = member.computeType(compiler);
|
| + if (canTearOff || canBeReflected) {
|
| + DartType memberType;
|
| + if (member.isGenerativeConstructorBody()) {
|
| + var body = member;
|
| + memberType = body.constructor.computeType(compiler);
|
| + } else {
|
| + memberType = member.computeType(compiler);
|
| + }
|
| if (memberType.containsTypeVariables) {
|
| jsAst.Expression thisAccess = js(r'this.$receiver');
|
| memberTypeExpression =
|
| @@ -473,7 +480,7 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| ..add(memberTypeExpression)
|
| ..addAll(task.metadataEmitter.reifyDefaultArguments(member));
|
|
|
| - if (canBeReflected || compiler.enabledFunctionApply) {
|
| + if (canBeReflected || canBeApplied) {
|
| parameters.orderedForEachParameter((Element parameter) {
|
| expressions.add(task.metadataEmitter.reifyName(parameter.name));
|
| });
|
| @@ -492,7 +499,7 @@ class ContainerBuilder extends CodeEmitterHelper {
|
| expressions
|
| ..add(reflectionName)
|
| ..addAll(task.metadataEmitter.computeMetadata(member));
|
| - } else if (isClosure && compiler.enabledFunctionApply) {
|
| + } else if (isClosure && canBeApplied) {
|
| expressions.add(js.string(member.name));
|
| }
|
|
|
|
|