//// [tests/cases/compiler/derivedClassConstructorWithExplicitReturns01.ts] ////

=== derivedClassConstructorWithExplicitReturns01.ts ===
class C {
>C : C
>  : ^

    cProp = 10;
>cProp : number
>      : ^^^^^^
>10 : 10
>   : ^^

    foo() { return "this never gets used."; }
>foo : () => string
>    : ^^^^^^^^^^^^
>"this never gets used." : "this never gets used."
>                        : ^^^^^^^^^^^^^^^^^^^^^^^

    constructor(value: number) {
>value : number
>      : ^^^^^^

        return {
>{            cProp: value,            foo() {                return "well this looks kinda C-ish.";            }        } : { cProp: number; foo(): string; }
>                                                                                                                          : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

            cProp: value,
>cProp : number
>      : ^^^^^^
>value : number
>      : ^^^^^^

            foo() {
>foo : () => string
>    : ^^^^^^^^^^^^

                return "well this looks kinda C-ish.";
>"well this looks kinda C-ish." : "well this looks kinda C-ish."
>                               : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            }
        }
    }
}

class D extends C {
>D : D
>  : ^
>C : C
>  : ^

    dProp = () => this;
>dProp : () => this
>      : ^^^^^^^^^^
>() => this : () => this
>           : ^^^^^^^^^^
>this : this
>     : ^^^^

    constructor(a = 100) {
>a : number
>  : ^^^^^^
>100 : 100
>    : ^^^

        super(a);
>super(a) : void
>         : ^^^^
>super : typeof C
>      : ^^^^^^^^
>a : number
>  : ^^^^^^

        if (Math.random() < 0.5) {
>Math.random() < 0.5 : boolean
>                    : ^^^^^^^
>Math.random() : number
>              : ^^^^^^
>Math.random : () => number
>            : ^^^^^^      
>Math : Math
>     : ^^^^
>random : () => number
>       : ^^^^^^      
>0.5 : 0.5
>    : ^^^

            "You win!"
>"You win!" : "You win!"
>           : ^^^^^^^^^^

            return {
>{                cProp: 1,                dProp: () => this,                foo() { return "You win!!!!!" }            } : { cProp: number; dProp: () => this; foo(): string; }
>                                                                                                                         : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

                cProp: 1,
>cProp : number
>      : ^^^^^^
>1 : 1
>  : ^

                dProp: () => this,
>dProp : () => this
>      : ^^^^^^^^^^
>() => this : () => this
>           : ^^^^^^^^^^
>this : this
>     : ^^^^

                foo() { return "You win!!!!!" }
>foo : () => string
>    : ^^^^^^^^^^^^
>"You win!!!!!" : "You win!!!!!"
>               : ^^^^^^^^^^^^^^

            };
        }
        else
            return null;
    }
}
