//// [tests/cases/conformance/expressions/superPropertyAccess/errorSuperPropertyAccess.ts] ////

=== errorSuperPropertyAccess.ts ===
//super property access in constructor of class with no base type
//super property access in instance member function of class with no base type
//super property access in instance member accessor(get and set) of class with no base type
class NoBase {
>NoBase : NoBase
>       : ^^^^^^

    constructor() {
        var a = super.prototype;
>a : any
>  : ^^^
>super.prototype : any
>                : ^^^
>super : any
>      : ^^^
>prototype : any
>          : ^^^

        var b = super.hasOwnProperty('');
>b : any
>  : ^^^
>super.hasOwnProperty('') : any
>                         : ^^^
>super.hasOwnProperty : any
>                     : ^^^
>super : any
>      : ^^^
>hasOwnProperty : any
>               : ^^^
>'' : ""
>   : ^^
    }

    fn() {
>fn : () => void
>   : ^^^^^^^^^^

        var a = super.prototype;
>a : any
>  : ^^^
>super.prototype : any
>                : ^^^
>super : any
>      : ^^^
>prototype : any
>          : ^^^

        var b = super.hasOwnProperty('');
>b : any
>  : ^^^
>super.hasOwnProperty('') : any
>                         : ^^^
>super.hasOwnProperty : any
>                     : ^^^
>super : any
>      : ^^^
>hasOwnProperty : any
>               : ^^^
>'' : ""
>   : ^^
    }

    m = super.prototype;
>m : any
>  : ^^^
>super.prototype : any
>                : ^^^
>super : any
>      : ^^^
>prototype : any
>          : ^^^

    n = super.hasOwnProperty('');
>n : any
>  : ^^^
>super.hasOwnProperty('') : any
>                         : ^^^
>super.hasOwnProperty : any
>                     : ^^^
>super : any
>      : ^^^
>hasOwnProperty : any
>               : ^^^
>'' : ""
>   : ^^

    //super static property access in static member function of class with no base type
    //super static property access in static member accessor(get and set) of class with no base type
    public static static1() {
>static1 : () => void
>        : ^^^^^^^^^^

        super.hasOwnProperty('');
>super.hasOwnProperty('') : any
>                         : ^^^
>super.hasOwnProperty : any
>                     : ^^^
>super : any
>      : ^^^
>hasOwnProperty : any
>               : ^^^
>'' : ""
>   : ^^
    }

    public static get static2() {
>static2 : string
>        : ^^^^^^

        super.hasOwnProperty('');
>super.hasOwnProperty('') : any
>                         : ^^^
>super.hasOwnProperty : any
>                     : ^^^
>super : any
>      : ^^^
>hasOwnProperty : any
>               : ^^^
>'' : ""
>   : ^^

        return '';
>'' : ""
>   : ^^
    }

    public static set static2(n) {
>static2 : string
>        : ^^^^^^
>n : string
>  : ^^^^^^

        super.hasOwnProperty('');
>super.hasOwnProperty('') : any
>                         : ^^^
>super.hasOwnProperty : any
>                     : ^^^
>super : any
>      : ^^^
>hasOwnProperty : any
>               : ^^^
>'' : ""
>   : ^^
    }
}

class SomeBase {
>SomeBase : SomeBase
>         : ^^^^^^^^

    private privateFunc() { }
>privateFunc : () => void
>            : ^^^^^^^^^^

    private privateMember = 0;
>privateMember : number
>              : ^^^^^^
>0 : 0
>  : ^

    public publicFunc() { }
>publicFunc : () => void
>           : ^^^^^^^^^^

    public publicMember = 0;
>publicMember : number
>             : ^^^^^^
>0 : 0
>  : ^

    private static privateStaticFunc() { }
>privateStaticFunc : () => void
>                  : ^^^^^^^^^^

    private static privateStaticMember = 0;
>privateStaticMember : number
>                    : ^^^^^^
>0 : 0
>  : ^

    public static publicStaticFunc() { }
>publicStaticFunc : () => void
>                 : ^^^^^^^^^^

    public static publicStaticMember = 0;
>publicStaticMember : number
>                   : ^^^^^^
>0 : 0
>  : ^

}


//super.publicInstanceMemberNotFunction in constructor of derived class
//super.publicInstanceMemberNotFunction in instance member function of derived class
//super.publicInstanceMemberNotFunction in instance member accessor(get and set) of derived class
//super property access only available with typed this
class SomeDerived1 extends SomeBase {
>SomeDerived1 : SomeDerived1
>             : ^^^^^^^^^^^^
>SomeBase : SomeBase
>         : ^^^^^^^^

    constructor() {
        super();
>super() : void
>        : ^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^

        super.publicMember = 1;
>super.publicMember = 1 : 1
>                       : ^
>super.publicMember : number
>                   : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>publicMember : number
>             : ^^^^^^
>1 : 1
>  : ^
    }

    fn() {
>fn : () => void
>   : ^^^^^^^^^^

        var x = super.publicMember;
>x : number
>  : ^^^^^^
>super.publicMember : number
>                   : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>publicMember : number
>             : ^^^^^^
    }

    get a() {
>a : any
>  : ^^^

        var x = super.publicMember;
>x : number
>  : ^^^^^^
>super.publicMember : number
>                   : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>publicMember : number
>             : ^^^^^^

        return undefined;
>undefined : undefined
>          : ^^^^^^^^^
    }
    set a(n) {
>a : any
>  : ^^^
>n : any
>  : ^^^

        n = super.publicMember;
>n = super.publicMember : number
>                       : ^^^^^^
>n : any
>  : ^^^
>super.publicMember : number
>                   : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>publicMember : number
>             : ^^^^^^
    }
    fn2() {
>fn2 : () => void
>    : ^^^^^^^^^^

        function inner() {
>inner : () => void
>      : ^^^^^^^^^^

            super.publicFunc();
>super.publicFunc() : any
>                   : ^^^
>super.publicFunc : any
>                 : ^^^
>super : any
>      : ^^^
>publicFunc : any
>           : ^^^
        }
        var x = {
>x : { test: () => any; }
>  : ^^^^^^^^^^^^^^^^^^^^
>{            test: function () { return super.publicFunc(); }        } : { test: () => any; }
>                                                                       : ^^^^^^^^^^^^^^^^^^^^

            test: function () { return super.publicFunc(); }
>test : () => any
>     : ^^^^^^^^^
>function () { return super.publicFunc(); } : () => any
>                                           : ^^^^^^^^^
>super.publicFunc() : any
>                   : ^^^
>super.publicFunc : any
>                 : ^^^
>super : any
>      : ^^^
>publicFunc : any
>           : ^^^
        }
    }
}

//super.privateProperty in constructor of derived class
//super.privateProperty in instance member function of derived class
//super.privateProperty in instance member accessor(get and set) of derived class
class SomeDerived2 extends SomeBase {
>SomeDerived2 : SomeDerived2
>             : ^^^^^^^^^^^^
>SomeBase : SomeBase
>         : ^^^^^^^^

    constructor() {
        super();
>super() : void
>        : ^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^

        super.privateMember = 1;
>super.privateMember = 1 : 1
>                        : ^
>super.privateMember : number
>                    : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>privateMember : number
>              : ^^^^^^
>1 : 1
>  : ^
    }

    fn() {
>fn : () => void
>   : ^^^^^^^^^^

        var x = super.privateMember;
>x : number
>  : ^^^^^^
>super.privateMember : number
>                    : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>privateMember : number
>              : ^^^^^^
    }

    get a() {
>a : any
>  : ^^^

        var x = super.privateMember;
>x : number
>  : ^^^^^^
>super.privateMember : number
>                    : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>privateMember : number
>              : ^^^^^^

        return undefined;
>undefined : undefined
>          : ^^^^^^^^^
    }
    set a(n) {
>a : any
>  : ^^^
>n : any
>  : ^^^

        n = super.privateMember;
>n = super.privateMember : number
>                        : ^^^^^^
>n : any
>  : ^^^
>super.privateMember : number
>                    : ^^^^^^
>super : SomeBase
>      : ^^^^^^^^
>privateMember : number
>              : ^^^^^^
    }
}

//super.publicStaticMemberNotFunction in static member function of derived class
//super.publicStaticMemberNotFunction in static member accessor(get and set) of derived class
//super.privateStaticProperty in static member function of derived class
//super.privateStaticProperty in static member accessor(get and set) of derived class
class SomeDerived3 extends SomeBase {
>SomeDerived3 : SomeDerived3
>             : ^^^^^^^^^^^^
>SomeBase : SomeBase
>         : ^^^^^^^^

    static fn() {
>fn : () => void
>   : ^^^^^^^^^^

        super.publicStaticMember = 3;
>super.publicStaticMember = 3 : 3
>                             : ^
>super.publicStaticMember : number
>                         : ^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>publicStaticMember : number
>                   : ^^^^^^
>3 : 3
>  : ^

        super.privateStaticMember = 3;
>super.privateStaticMember = 3 : 3
>                              : ^
>super.privateStaticMember : number
>                          : ^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>privateStaticMember : number
>                    : ^^^^^^
>3 : 3
>  : ^

        super.privateStaticFunc();
>super.privateStaticFunc() : void
>                          : ^^^^
>super.privateStaticFunc : () => void
>                        : ^^^^^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>privateStaticFunc : () => void
>                  : ^^^^^^^^^^
    }
    static get a() {
>a : string
>  : ^^^^^^

        super.publicStaticMember = 3;
>super.publicStaticMember = 3 : 3
>                             : ^
>super.publicStaticMember : number
>                         : ^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>publicStaticMember : number
>                   : ^^^^^^
>3 : 3
>  : ^

        super.privateStaticMember = 3;
>super.privateStaticMember = 3 : 3
>                              : ^
>super.privateStaticMember : number
>                          : ^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>privateStaticMember : number
>                    : ^^^^^^
>3 : 3
>  : ^

        super.privateStaticFunc();
>super.privateStaticFunc() : void
>                          : ^^^^
>super.privateStaticFunc : () => void
>                        : ^^^^^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>privateStaticFunc : () => void
>                  : ^^^^^^^^^^

        return '';
>'' : ""
>   : ^^
    }
    static set a(n) {
>a : string
>  : ^^^^^^
>n : string
>  : ^^^^^^

        super.publicStaticMember = 3;
>super.publicStaticMember = 3 : 3
>                             : ^
>super.publicStaticMember : number
>                         : ^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>publicStaticMember : number
>                   : ^^^^^^
>3 : 3
>  : ^

        super.privateStaticMember = 3;
>super.privateStaticMember = 3 : 3
>                              : ^
>super.privateStaticMember : number
>                          : ^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>privateStaticMember : number
>                    : ^^^^^^
>3 : 3
>  : ^

        super.privateStaticFunc();
>super.privateStaticFunc() : void
>                          : ^^^^
>super.privateStaticFunc : () => void
>                        : ^^^^^^^^^^
>super : typeof SomeBase
>      : ^^^^^^^^^^^^^^^
>privateStaticFunc : () => void
>                  : ^^^^^^^^^^
    }
}

// In object literal
var obj = { n: super.wat, p: super.foo() };
>obj : { n: any; p: any; }
>    : ^^^^^^^^^^^^^^^^^^^
>{ n: super.wat, p: super.foo() } : { n: any; p: any; }
>                                 : ^^^^^^^^^^^^^^^^^^^
>n : any
>  : ^^^
>super.wat : any
>          : ^^^
>super : any
>      : ^^^
>wat : any
>    : ^^^
>p : any
>  : ^^^
>super.foo() : any
>            : ^^^
>super.foo : any
>          : ^^^
>super : any
>      : ^^^
>foo : any
>    : ^^^

