LibJS: Distinguish between statement and declaration

This separates matching/parsing of statements and declarations and
fixes a few edge cases where the parser would incorrectly accept a
declaration where only a statement is allowed - for example:

    if (foo) const a = 1;
    for (var bar;;) function b() {}
    while (baz) class c {}
This commit is contained in:
Linus Groh 2020-10-22 23:30:07 +01:00 committed by Andreas Kling
parent f8ae6fa713
commit 80bb62b9cc
Notes: sideshowbarker 2024-07-19 01:47:04 +09:00
4 changed files with 73 additions and 30 deletions

View file

@ -0,0 +1,6 @@
test("Declaration in single-statement context is a syntax error", () => {
expect("if (0) const foo = 1").not.toEval();
expect("while (0) function foo() {}").not.toEval();
expect("for (var 0;;) class foo() {}").not.toEval();
expect("do let foo = 1 while (0)").not.toEval();
});