=== tests/cases/conformance/types/localTypes/localTypes1.ts ===

function f1() {
>f1 : Symbol(f1, Decl(localTypes1.ts, 0, 0))

    enum E {
>E : Symbol(E, Decl(localTypes1.ts, 1, 15))

        A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 2, 12))
>B : Symbol(E.B, Decl(localTypes1.ts, 3, 10))
>C : Symbol(E.C, Decl(localTypes1.ts, 3, 13))
    }
    class C {
>C : Symbol(C, Decl(localTypes1.ts, 4, 5))

        x: E;
>x : Symbol(x, Decl(localTypes1.ts, 5, 13))
>E : Symbol(E, Decl(localTypes1.ts, 1, 15))
    }
    interface I {
>I : Symbol(I, Decl(localTypes1.ts, 7, 5))

        x: E;
>x : Symbol(x, Decl(localTypes1.ts, 8, 17))
>E : Symbol(E, Decl(localTypes1.ts, 1, 15))
    }
    type A = I[];
>A : Symbol(A, Decl(localTypes1.ts, 10, 5))
>I : Symbol(I, Decl(localTypes1.ts, 7, 5))

    let a: A = [new C()];
>a : Symbol(a, Decl(localTypes1.ts, 12, 7))
>A : Symbol(A, Decl(localTypes1.ts, 10, 5))
>C : Symbol(C, Decl(localTypes1.ts, 4, 5))

    a[0].x = E.B;
>a[0].x : Symbol(I.x, Decl(localTypes1.ts, 8, 17))
>a : Symbol(a, Decl(localTypes1.ts, 12, 7))
>x : Symbol(I.x, Decl(localTypes1.ts, 8, 17))
>E.B : Symbol(E.B, Decl(localTypes1.ts, 3, 10))
>E : Symbol(E, Decl(localTypes1.ts, 1, 15))
>B : Symbol(E.B, Decl(localTypes1.ts, 3, 10))

    return a;
>a : Symbol(a, Decl(localTypes1.ts, 12, 7))
}

function f2() {
>f2 : Symbol(f2, Decl(localTypes1.ts, 15, 1))

    function g() {
>g : Symbol(g, Decl(localTypes1.ts, 17, 15))

        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 18, 18))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 19, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 20, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 20, 17))
        }
        class C {
>C : Symbol(C, Decl(localTypes1.ts, 21, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 22, 17))
>E : Symbol(E, Decl(localTypes1.ts, 18, 18))
        }
        interface I {
>I : Symbol(I, Decl(localTypes1.ts, 24, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 25, 21))
>E : Symbol(E, Decl(localTypes1.ts, 18, 18))
        }
        type A = I[];
>A : Symbol(A, Decl(localTypes1.ts, 27, 9))
>I : Symbol(I, Decl(localTypes1.ts, 24, 9))

        let a: A = [new C()];
>a : Symbol(a, Decl(localTypes1.ts, 29, 11))
>A : Symbol(A, Decl(localTypes1.ts, 27, 9))
>C : Symbol(C, Decl(localTypes1.ts, 21, 9))

        a[0].x = E.B;
>a[0].x : Symbol(I.x, Decl(localTypes1.ts, 25, 21))
>a : Symbol(a, Decl(localTypes1.ts, 29, 11))
>x : Symbol(I.x, Decl(localTypes1.ts, 25, 21))
>E.B : Symbol(E.B, Decl(localTypes1.ts, 20, 14))
>E : Symbol(E, Decl(localTypes1.ts, 18, 18))
>B : Symbol(E.B, Decl(localTypes1.ts, 20, 14))

        return a;
>a : Symbol(a, Decl(localTypes1.ts, 29, 11))
    }
    return g();
>g : Symbol(g, Decl(localTypes1.ts, 17, 15))
}

function f3(b: boolean) {
>f3 : Symbol(f3, Decl(localTypes1.ts, 34, 1))
>b : Symbol(b, Decl(localTypes1.ts, 36, 12))

    if (true) {
        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 38, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 39, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 39, 17))
        }
        if (b) {
>b : Symbol(b, Decl(localTypes1.ts, 36, 12))

            class C {
>C : Symbol(C, Decl(localTypes1.ts, 41, 16))

                x: E;
>x : Symbol(x, Decl(localTypes1.ts, 42, 21))
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))
            }
            interface I {
>I : Symbol(I, Decl(localTypes1.ts, 44, 13))

                x: E;
>x : Symbol(x, Decl(localTypes1.ts, 45, 25))
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))
            }
            type A = I[];
>A : Symbol(A, Decl(localTypes1.ts, 47, 13))
>I : Symbol(I, Decl(localTypes1.ts, 44, 13))

            let a: A = [new C()];
>a : Symbol(a, Decl(localTypes1.ts, 49, 15))
>A : Symbol(A, Decl(localTypes1.ts, 47, 13))
>C : Symbol(C, Decl(localTypes1.ts, 41, 16))

            a[0].x = E.B;
>a[0].x : Symbol(I.x, Decl(localTypes1.ts, 45, 25))
>a : Symbol(a, Decl(localTypes1.ts, 49, 15))
>x : Symbol(I.x, Decl(localTypes1.ts, 45, 25))
>E.B : Symbol(E.B, Decl(localTypes1.ts, 39, 14))
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))
>B : Symbol(E.B, Decl(localTypes1.ts, 39, 14))

            return a;
>a : Symbol(a, Decl(localTypes1.ts, 49, 15))
        }
        else {
            class A {
>A : Symbol(A, Decl(localTypes1.ts, 53, 14))

                x: E;
>x : Symbol(x, Decl(localTypes1.ts, 54, 21))
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))
            }
            interface J {
>J : Symbol(J, Decl(localTypes1.ts, 56, 13))

                x: E;
>x : Symbol(x, Decl(localTypes1.ts, 57, 25))
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))
            }
            type C = J[];
>C : Symbol(C, Decl(localTypes1.ts, 59, 13))
>J : Symbol(J, Decl(localTypes1.ts, 56, 13))

            let c: C = [new A()];
>c : Symbol(c, Decl(localTypes1.ts, 61, 15))
>C : Symbol(C, Decl(localTypes1.ts, 59, 13))
>A : Symbol(A, Decl(localTypes1.ts, 53, 14))

            c[0].x = E.B;
>c[0].x : Symbol(J.x, Decl(localTypes1.ts, 57, 25))
>c : Symbol(c, Decl(localTypes1.ts, 61, 15))
>x : Symbol(J.x, Decl(localTypes1.ts, 57, 25))
>E.B : Symbol(E.B, Decl(localTypes1.ts, 39, 14))
>E : Symbol(E, Decl(localTypes1.ts, 37, 15))
>B : Symbol(E.B, Decl(localTypes1.ts, 39, 14))

            return c;
>c : Symbol(c, Decl(localTypes1.ts, 61, 15))
        }
    }
}

function f5() {
>f5 : Symbol(f5, Decl(localTypes1.ts, 66, 1))

    var z1 = function () {
>z1 : Symbol(z1, Decl(localTypes1.ts, 69, 7))

        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 69, 26))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 70, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 71, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 71, 17))
        }
        class C {
>C : Symbol(C, Decl(localTypes1.ts, 72, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 73, 17))
>E : Symbol(E, Decl(localTypes1.ts, 69, 26))
        }
        return new C();
>C : Symbol(C, Decl(localTypes1.ts, 72, 9))
    }
    var z2 = () => {
>z2 : Symbol(z2, Decl(localTypes1.ts, 78, 7))

        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 78, 20))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 79, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 80, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 80, 17))
        }
        class C {
>C : Symbol(C, Decl(localTypes1.ts, 81, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 82, 17))
>E : Symbol(E, Decl(localTypes1.ts, 78, 20))
        }
        return new C();
>C : Symbol(C, Decl(localTypes1.ts, 81, 9))
    }
}

class A {
>A : Symbol(A, Decl(localTypes1.ts, 87, 1))

    constructor() {
        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 90, 19))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 91, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 92, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 92, 17))
        }
        class C {
>C : Symbol(C, Decl(localTypes1.ts, 93, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 94, 17))
>E : Symbol(E, Decl(localTypes1.ts, 90, 19))
        }
    }
    m() {
>m : Symbol(m, Decl(localTypes1.ts, 97, 5))

        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 98, 9))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 99, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 100, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 100, 17))
        }
        class C {
>C : Symbol(C, Decl(localTypes1.ts, 101, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 102, 17))
>E : Symbol(E, Decl(localTypes1.ts, 98, 9))
        }
        return new C();
>C : Symbol(C, Decl(localTypes1.ts, 101, 9))
    }
    get p() {
>p : Symbol(p, Decl(localTypes1.ts, 106, 5))

        enum E {
>E : Symbol(E, Decl(localTypes1.ts, 107, 13))

            A, B, C
>A : Symbol(E.A, Decl(localTypes1.ts, 108, 16))
>B : Symbol(E.B, Decl(localTypes1.ts, 109, 14))
>C : Symbol(E.C, Decl(localTypes1.ts, 109, 17))
        }
        class C {
>C : Symbol(C, Decl(localTypes1.ts, 110, 9))

            x: E;
>x : Symbol(x, Decl(localTypes1.ts, 111, 17))
>E : Symbol(E, Decl(localTypes1.ts, 107, 13))
        }
        return new C();
>C : Symbol(C, Decl(localTypes1.ts, 110, 9))
    }
}

function f6() {
>f6 : Symbol(f6, Decl(localTypes1.ts, 116, 1))

    class A {
>A : Symbol(A, Decl(localTypes1.ts, 118, 15))

        a: string;
>a : Symbol(a, Decl(localTypes1.ts, 119, 13))
    }
    function g() {
>g : Symbol(g, Decl(localTypes1.ts, 121, 5))

        class B extends A {
>B : Symbol(B, Decl(localTypes1.ts, 122, 18))
>A : Symbol(A, Decl(localTypes1.ts, 118, 15))

            b: string;
>b : Symbol(b, Decl(localTypes1.ts, 123, 27))
        }
        function h() {
>h : Symbol(h, Decl(localTypes1.ts, 125, 9))

            class C extends B {
>C : Symbol(C, Decl(localTypes1.ts, 126, 22))
>B : Symbol(B, Decl(localTypes1.ts, 122, 18))

                c: string;
>c : Symbol(c, Decl(localTypes1.ts, 127, 31))
            }
            var x = new C();
>x : Symbol(x, Decl(localTypes1.ts, 130, 15))
>C : Symbol(C, Decl(localTypes1.ts, 126, 22))

            x.a = "a";
>x.a : Symbol(A.a, Decl(localTypes1.ts, 119, 13))
>x : Symbol(x, Decl(localTypes1.ts, 130, 15))
>a : Symbol(A.a, Decl(localTypes1.ts, 119, 13))

            x.b = "b";
>x.b : Symbol(B.b, Decl(localTypes1.ts, 123, 27))
>x : Symbol(x, Decl(localTypes1.ts, 130, 15))
>b : Symbol(B.b, Decl(localTypes1.ts, 123, 27))

            x.c = "c";
>x.c : Symbol(C.c, Decl(localTypes1.ts, 127, 31))
>x : Symbol(x, Decl(localTypes1.ts, 130, 15))
>c : Symbol(C.c, Decl(localTypes1.ts, 127, 31))

            return x;
>x : Symbol(x, Decl(localTypes1.ts, 130, 15))
        }
        return h();
>h : Symbol(h, Decl(localTypes1.ts, 125, 9))
    }
    return g();
>g : Symbol(g, Decl(localTypes1.ts, 121, 5))
}

