| Index: pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| index c8c184fa1388d9982998daa415a5941f87f6daa2..4f93069d9642525c687d9e003229882c8b1c3244 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
|
| @@ -1745,52 +1745,55 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
|
| String name = pop();
|
| List<DartType> typeArguments = pop();
|
| var type = pop();
|
| - constantExpressionRequired = pop();
|
| -
|
| - if (arguments == null) {
|
| - push(buildCompileTimeError("No arguments.", nameToken.charOffset));
|
| - return;
|
| - }
|
| + bool savedConstantExpressionRequired = pop();
|
| + () {
|
| + if (arguments == null) {
|
| + push(buildCompileTimeError("No arguments.", nameToken.charOffset));
|
| + return;
|
| + }
|
|
|
| - if (typeArguments != null) {
|
| - assert(arguments.types.isEmpty);
|
| - arguments.types.addAll(typeArguments);
|
| - }
|
| + if (typeArguments != null) {
|
| + assert(arguments.types.isEmpty);
|
| + arguments.types.addAll(typeArguments);
|
| + }
|
|
|
| - String errorName;
|
| - if (type is ClassBuilder) {
|
| - Builder b = type.findConstructorOrFactory(name);
|
| - Member target;
|
| - if (b == null) {
|
| - // Not found. Reported below.
|
| - } else if (b.isConstructor) {
|
| - if (type.isAbstract) {
|
| - // TODO(ahe): Generate abstract instantiation error.
|
| - } else {
|
| - target = b.target;
|
| + String errorName;
|
| + if (type is ClassBuilder) {
|
| + Builder b = type.findConstructorOrFactory(name);
|
| + Member target;
|
| + if (b == null) {
|
| + // Not found. Reported below.
|
| + } else if (b.isConstructor) {
|
| + if (type.isAbstract) {
|
| + // TODO(ahe): Generate abstract instantiation error.
|
| + } else {
|
| + target = b.target;
|
| + }
|
| + } else if (b.isFactory) {
|
| + target = getRedirectionTarget(b.target);
|
| + if (target == null) {
|
| + push(buildCompileTimeError(
|
| + "Cyclic definition of factory '${name}'.",
|
| + nameToken.charOffset));
|
| + return;
|
| + }
|
| }
|
| - } else if (b.isFactory) {
|
| - target = getRedirectionTarget(b.target);
|
| - if (target == null) {
|
| - push(buildCompileTimeError(
|
| - "Cyclic definition of factory '${name}'.", nameToken.charOffset));
|
| + if (target is Constructor ||
|
| + (target is Procedure && target.kind == ProcedureKind.Factory)) {
|
| + push(buildStaticInvocation(target, arguments,
|
| + isConst: optional("const", token),
|
| + charOffset: nameToken.charOffset));
|
| return;
|
| + } else {
|
| + errorName = debugName(type.name, name);
|
| }
|
| - }
|
| - if (target is Constructor ||
|
| - (target is Procedure && target.kind == ProcedureKind.Factory)) {
|
| - push(buildStaticInvocation(target, arguments,
|
| - isConst: optional("const", token),
|
| - charOffset: nameToken.charOffset));
|
| - return;
|
| } else {
|
| - errorName = debugName(type.name, name);
|
| + errorName = debugName(getNodeName(type), name);
|
| }
|
| - } else {
|
| - errorName = debugName(getNodeName(type), name);
|
| - }
|
| - errorName ??= name;
|
| - push(throwNoSuchMethodError(errorName, arguments, nameToken.charOffset));
|
| + errorName ??= name;
|
| + push(throwNoSuchMethodError(errorName, arguments, nameToken.charOffset));
|
| + }();
|
| + constantExpressionRequired = savedConstantExpressionRequired;
|
| }
|
|
|
| @override
|
|
|