=== tests/cases/compiler/isDeclarationVisibleNodeKinds.ts ===

// Function types
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export function createValidator1(schema: any): <T>(data: T) => T {
>createValidator1 : Symbol(createValidator1, Decl(isDeclarationVisibleNodeKinds.ts, 2, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 3, 37))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 3, 52))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 3, 55))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 3, 52))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 3, 52))

        return undefined;
>undefined : Symbol(undefined)
    }
}

// Constructor types
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export function createValidator2(schema: any): new <T>(data: T) => T {
>createValidator2 : Symbol(createValidator2, Decl(isDeclarationVisibleNodeKinds.ts, 9, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 10, 37))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 10, 56))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 10, 59))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 10, 56))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 10, 56))

        return undefined;
>undefined : Symbol(undefined)
    }
}

// union types
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

     export function createValidator3(schema: any): number | { new <T>(data: T): T; }  {
>createValidator3 : Symbol(createValidator3, Decl(isDeclarationVisibleNodeKinds.ts, 16, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 17, 38))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 17, 68))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 17, 71))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 17, 68))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 17, 68))

        return undefined;
>undefined : Symbol(undefined)
    }
}

// Array types
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

     export function createValidator4(schema: any): { new <T>(data: T): T; }[] {
>createValidator4 : Symbol(createValidator4, Decl(isDeclarationVisibleNodeKinds.ts, 23, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 24, 38))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 24, 59))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 24, 62))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 24, 59))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 24, 59))

        return undefined;
>undefined : Symbol(undefined)
    }
}


// TypeLiterals
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export function createValidator5(schema: any): { new <T>(data: T): T } {
>createValidator5 : Symbol(createValidator5, Decl(isDeclarationVisibleNodeKinds.ts, 31, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 32, 37))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 32, 58))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 32, 61))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 32, 58))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 32, 58))

        return undefined;
>undefined : Symbol(undefined)
    }
}

// Tuple types
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export function createValidator6(schema: any): [ new <T>(data: T) => T, number] {
>createValidator6 : Symbol(createValidator6, Decl(isDeclarationVisibleNodeKinds.ts, 38, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 39, 37))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 39, 58))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 39, 61))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 39, 58))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 39, 58))

        return undefined;
>undefined : Symbol(undefined)
    }
}

// Paren Types
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export function createValidator7(schema: any): (new <T>(data: T)=>T )[] {
>createValidator7 : Symbol(createValidator7, Decl(isDeclarationVisibleNodeKinds.ts, 45, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 46, 37))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 46, 57))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 46, 60))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 46, 57))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 46, 57))

        return undefined;
>undefined : Symbol(undefined)
    }
}

// Type reference
module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export function createValidator8(schema: any): Array<{ <T>(data: T) : T}> {
>createValidator8 : Symbol(createValidator8, Decl(isDeclarationVisibleNodeKinds.ts, 52, 15))
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 53, 37))
>Array : Symbol(Array, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 53, 60))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 53, 63))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 53, 60))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 53, 60))

        return undefined;
>undefined : Symbol(undefined)
    }
}


module schema {
>schema : Symbol(schema, Decl(isDeclarationVisibleNodeKinds.ts, 0, 0), Decl(isDeclarationVisibleNodeKinds.ts, 6, 1), Decl(isDeclarationVisibleNodeKinds.ts, 13, 1), Decl(isDeclarationVisibleNodeKinds.ts, 20, 1), Decl(isDeclarationVisibleNodeKinds.ts, 27, 1), Decl(isDeclarationVisibleNodeKinds.ts, 35, 1), Decl(isDeclarationVisibleNodeKinds.ts, 42, 1), Decl(isDeclarationVisibleNodeKinds.ts, 49, 1), Decl(isDeclarationVisibleNodeKinds.ts, 56, 1))

    export class T {
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 59, 15))

        get createValidator9(): <T>(data: T) => T {
>createValidator9 : Symbol(T.createValidator9, Decl(isDeclarationVisibleNodeKinds.ts, 60, 20))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 61, 33))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 61, 36))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 61, 33))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 61, 33))

            return undefined;
>undefined : Symbol(undefined)
        }
        
        set createValidator10(v: <T>(data: T) => T) {
>createValidator10 : Symbol(T.createValidator10, Decl(isDeclarationVisibleNodeKinds.ts, 63, 9))
>v : Symbol(v, Decl(isDeclarationVisibleNodeKinds.ts, 65, 30))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 65, 34))
>data : Symbol(data, Decl(isDeclarationVisibleNodeKinds.ts, 65, 37))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 65, 34))
>T : Symbol(T, Decl(isDeclarationVisibleNodeKinds.ts, 65, 34))
        }
    }
}
