==== tests/cases/compiler/genericRecursiveImplicitConstructorErrors3.ts (11 errors) ====
    module TypeScript {
        export class MemberName <A,B,C>{
            static create<A,B,C>(arg1: any, arg2?: any, arg3?: any): MemberName {
                                                                     ~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(3,66): error TS2131: Function declared a non-void return type, but has no return expression.
                                                                     ~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(3,66): error TS2173: Generic type references must include all type arguments.
            }
        }
    }
     
    module TypeScript {
        export class PullSymbol <A,B,C>{
            public type: PullTypeSymbol = null;
                         ~~~~~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(10,22): error TS2173: Generic type references must include all type arguments.
        }
        export class PullTypeSymbol <A,B,C>extends PullSymbol {
                                                   ~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(12,48): error TS2173: Generic type references must include all type arguments.
            private _elementType: PullTypeSymbol = null;
                                  ~~~~~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(13,31): error TS2173: Generic type references must include all type arguments.
            public toString<A,B,C>(scopeSymbol?: PullSymbol, useConstraintInName?: boolean) {
                                                 ~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(14,46): error TS2173: Generic type references must include all type arguments.
                var s = this.getScopedNameEx(scopeSymbol, useConstraintInName).toString();
                return s;
            }
            public getScopedNameEx<A,B,C>(scopeSymbol?: PullSymbol, useConstraintInName?: boolean, getPrettyTypeName?: boolean, getTypeParamMarkerInfo?: boolean) {
                                                        ~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(18,53): error TS2173: Generic type references must include all type arguments.
                if (this.isArray()) {
                         ~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(19,22): error TS2094: The property 'isArray' does not exist on value of type 'PullTypeSymbol<A, B, C>'.
                    var elementMemberName = this._elementType ?
                    (this._elementType.isArray() || this._elementType.isNamedTypeSymbol() ?
                                       ~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(21,36): error TS2094: The property 'isArray' does not exist on value of type 'PullTypeSymbol<any, any, any>'.
                                                                      ~~~~~~~~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(21,67): error TS2094: The property 'isNamedTypeSymbol' does not exist on value of type 'PullTypeSymbol<any, any, any>'.
                    this._elementType.getScopedNameEx(scopeSymbol, false, getPrettyTypeName, getTypeParamMarkerInfo) :
                    this._elementType.getMemberTypeNameEx(false, scopeSymbol, getPrettyTypeName)) : 1
                                      ~~~~~~~~~~~~~~~~~~~
!!! genericRecursiveImplicitConstructorErrors3.ts(23,35): error TS2094: The property 'getMemberTypeNameEx' does not exist on value of type 'PullTypeSymbol<any, any, any>'.
                    return MemberName.create(elementMemberName, "", "[]");
                }
            }
        }
    }
     
    