| Index: sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| index 369405f20afba3ca1607be1657893ed00069e5aa..6955060d3bdcfdbcad1f4197ad23e006a0119a9a 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| @@ -3484,8 +3484,7 @@ class TypedefResolverVisitor extends TypeDefinitionVisitor {
|
| element.alias = compiler.computeFunctionType(element, signature);
|
|
|
| void checkCyclicReference() {
|
| - var visitor = new TypedefCyclicVisitor(compiler, element);
|
| - type.accept(visitor, null);
|
| + element.checkCyclicReference(compiler);
|
| }
|
| addPostProcessAction(element, checkCyclicReference);
|
| }
|
| @@ -3495,13 +3494,9 @@ class TypedefResolverVisitor extends TypeDefinitionVisitor {
|
| // annotations in typedef alias are stored in a [TreeElements] mapping.
|
| class TypedefCyclicVisitor extends DartTypeVisitor {
|
| final Compiler compiler;
|
| - final TypedefElement element;
|
| + final TypedefElementX element;
|
| bool hasCyclicReference = false;
|
|
|
| - /// Counter for how many bounds the visitor currently has on the call-stack.
|
| - /// Used to detect when to report [Messagekind.CYCLIC_TYPEDEF_TYPEVAR].
|
| - int seenBoundsCount = 0;
|
| -
|
| Link<TypedefElement> seenTypedefs = const Link<TypedefElement>();
|
|
|
| int seenTypedefsCount = 0;
|
| @@ -3522,9 +3517,7 @@ class TypedefCyclicVisitor extends DartTypeVisitor {
|
| // Only report an error on the checked typedef to avoid generating
|
| // multiple errors for the same cyclicity.
|
| hasCyclicReference = true;
|
| - if (seenBoundsCount > 0) {
|
| - compiler.reportError(element, MessageKind.CYCLIC_TYPEDEF_TYPEVAR);
|
| - } else if (seenTypedefsCount == 1) {
|
| + if (seenTypedefsCount == 1) {
|
| // Direct cyclicity.
|
| compiler.reportError(element,
|
| MessageKind.CYCLIC_TYPEDEF,
|
| @@ -3546,6 +3539,13 @@ class TypedefCyclicVisitor extends DartTypeVisitor {
|
| }
|
| }
|
| }
|
| + ErroneousElementX erroneousElement = new ErroneousElementX(
|
| + MessageKind.CYCLIC_TYPEDEF,
|
| + {'typedefName': element.name},
|
| + element.name, element);
|
| + element.alias =
|
| + new MalformedType(erroneousElement, typedefElement.alias);
|
| + element.cyclicCheck = true;
|
| }
|
| } else {
|
| seenTypedefs = seenTypedefs.prepend(typedefElement);
|
| @@ -3573,9 +3573,7 @@ class TypedefCyclicVisitor extends DartTypeVisitor {
|
| return;
|
| }
|
| seenTypeVariables = seenTypeVariables.prepend(typeVariableElement);
|
| - seenBoundsCount++;
|
| typeVariableElement.bound.accept(this, null);
|
| - seenBoundsCount--;
|
| seenTypeVariables = seenTypeVariables.tail;
|
| }
|
| }
|
|
|