class x {}

class Foo {}
class Foo extends Bar {}

class Foo {
    constructor()
    {
        1
    }
}

class Foo {
    constructor()
    {
        1
    }
    static staticMethod()
    {
        1
    }
}

class Foo {
    static staticMethod()
    {
        1
    }
}

class Foo extends Bar {
    constructor()
    {
        super()
    }
}

class Foo extends Bar {
    constructor()
    {
        1
    }
    static staticMethod()
    {
        super.staticMethod()
    }
}

class Foo extends Bar {
    constructor()
    {
        1
    }
    static staticMethod()
    {
        super.staticMethod()
    }
    method1()
    {
        1
    }
    method2(name, {options})
    {
        1
    }
    get getter()
    {
        1
    }
    set setter(x)
    {
        1
    }
    *gen1()
    {
        1
    }
    *gen2()
    {
        1
    }
    async a()
    {
        1
    }
}

A = class Foo extends (b ? Bar : Bar) {
    constructor()
    {
        new.target.staticMethod()
    }
    static staticMethod()
    {
        super.staticMethod()
    }
    method1()
    {
        1
    }
    method2(name, {options})
    {
        super.method()
    }
    get getter()
    {
        1
    }
    set setter(x)
    {
        1
    }
    *gen1()
    {
        1
    }
    *gen2()
    {
        1
    }
    async a()
    {
        1
    }
}

class Foo {
    static async async()
    {
        1
    }
    async async()
    {
        1
    }
    async()
    {
        1
    }
}

class Foo {
    async "f"() {}
    async 1() {}
    async ["f"]() {}
}

// ES2018 - Async Iteration / Async Generators

class Foo {
    static async *async()
    {
        1
    }
    async *async()
    {
        1
    }
    *async()
    {
        1
    }
}

class Foo {
    static async *async()
    {
        1
    }
    async *async()
    {
        1
    }
    *async()
    {
        1
    }
}

class Foo {
    static async *async()
    {
        1
    }
    async *async()
    {
        1
    }
    *async()
    {
        1
    }
}

class Foo {
    async *"f"() {}
    async *1() {}
    async *["f"]() {}
}
