swc/crates/swc_ecma_parser/tests/tsc/asyncMethodWithSuper_es6.ts

190 lines
4.3 KiB
TypeScript

// @target: ES6
// @lib: esnext
// @noEmitHelpers: true
class A {
x() {
}
y() {
}
}
class B extends A {
// async method with only call/get on 'super' does not require a binding
async simple() {
// call with property access
super.x();
// call additional property.
super.y();
// call with element access
super["x"]();
// property access (read)
const a = super.x;
// element access (read)
const b = super["x"];
}
// async method with assignment/destructuring on 'super' requires a binding
async advanced() {
const f = () => {};
// call with property access
super.x();
// call with element access
super["x"]();
// property access (read)
const a = super.x;
// element access (read)
const b = super["x"];
// property access (assign)
super.x = f;
// element access (assign)
super["x"] = f;
// destructuring assign with property access
({ f: super.x } = { f });
// destructuring assign with element access
({ f: super["x"] } = { f });
// property access in arrow
(() => super.x());
// element access in arrow
(() => super["x"]());
// property access in async arrow
(async () => super.x());
// element access in async arrow
(async () => super["x"]());
}
async property_access_only_read_only() {
// call with property access
super.x();
// property access (read)
const a = super.x;
// property access in arrow
(() => super.x());
// property access in async arrow
(async () => super.x());
}
async property_access_only_write_only() {
const f = () => {};
// property access (assign)
super.x = f;
// destructuring assign with property access
({ f: super.x } = { f });
// property access (assign) in arrow
(() => super.x = f);
// property access (assign) in async arrow
(async () => super.x = f);
}
async element_access_only_read_only() {
// call with element access
super["x"]();
// element access (read)
const a = super["x"];
// element access in arrow
(() => super["x"]());
// element access in async arrow
(async () => super["x"]());
}
async element_access_only_write_only() {
const f = () => {};
// element access (assign)
super["x"] = f;
// destructuring assign with element access
({ f: super["x"] } = { f });
// element access (assign) in arrow
(() => super["x"] = f);
// element access (assign) in async arrow
(async () => super["x"] = f);
}
async * property_access_only_read_only_in_generator() {
// call with property access
super.x();
// property access (read)
const a = super.x;
// property access in arrow
(() => super.x());
// property access in async arrow
(async () => super.x());
}
async * property_access_only_write_only_in_generator() {
const f = () => {};
// property access (assign)
super.x = f;
// destructuring assign with property access
({ f: super.x } = { f });
// property access (assign) in arrow
(() => super.x = f);
// property access (assign) in async arrow
(async () => super.x = f);
}
async * element_access_only_read_only_in_generator() {
// call with element access
super["x"]();
// element access (read)
const a = super["x"];
// element access in arrow
(() => super["x"]());
// element access in async arrow
(async () => super["x"]());
}
async * element_access_only_write_only_in_generator() {
const f = () => {};
// element access (assign)
super["x"] = f;
// destructuring assign with element access
({ f: super["x"] } = { f });
// element access (assign) in arrow
(() => super["x"] = f);
// element access (assign) in async arrow
(async () => super["x"] = f);
}
}