mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:28:12 +00:00
LibJS: Allow CallExpression as left hand side of for-of/for-in loops
Although this will fail with a ReferenceError it should pass the parser and only fail if actually assigned to.
This commit is contained in:
parent
ce057115fc
commit
65bebb5241
4 changed files with 63 additions and 10 deletions
|
@ -112,8 +112,34 @@ test("allow binding patterns", () => {
|
|||
expect(counter).toBe(3);
|
||||
});
|
||||
|
||||
test("allow member expression as variable", () => {
|
||||
const f = {};
|
||||
for (f.a of "abc");
|
||||
expect(f.a).toBe("c");
|
||||
describe("special left hand sides", () => {
|
||||
test("allow member expression as variable", () => {
|
||||
const f = {};
|
||||
for (f.a of "abc");
|
||||
expect(f.a).toBe("c");
|
||||
});
|
||||
|
||||
test("allow member expression of function call", () => {
|
||||
const b = {};
|
||||
function f() {
|
||||
return b;
|
||||
}
|
||||
|
||||
for (f().a of "abc");
|
||||
|
||||
expect(f().a).toBe("c");
|
||||
});
|
||||
|
||||
test("call function is allowed in parsing but fails in runtime", () => {
|
||||
function f() {
|
||||
expect().fail();
|
||||
}
|
||||
|
||||
// Does not fail since it does not iterate but prettier does not like it so we use eval.
|
||||
expect("for (f() of []);").toEvalTo(undefined);
|
||||
|
||||
expect(() => {
|
||||
eval("for (f() of [0]) { expect().fail() }");
|
||||
}).toThrowWithMessage(ReferenceError, "Invalid left-hand side in assignment");
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue