Skip to content

Commit 2dbea60

Browse files
linusgawesomekling
authored andcommitted
LibJS: Multiple 'default' clauses in switch statement are a syntax error
1 parent 57e7b2f commit 2dbea60

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

Libraries/LibJS/Parser.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1519,8 +1519,15 @@ NonnullRefPtr<SwitchStatement> Parser::parse_switch_statement()
15191519

15201520
NonnullRefPtrVector<SwitchCase> cases;
15211521

1522-
while (match(TokenType::Case) || match(TokenType::Default))
1522+
auto has_default = false;
1523+
while (match(TokenType::Case) || match(TokenType::Default)) {
1524+
if (match(TokenType::Default)) {
1525+
if (has_default)
1526+
syntax_error("Multiple 'default' clauses in switch statement");
1527+
has_default = true;
1528+
}
15231529
cases.append(parse_switch_case());
1530+
}
15241531

15251532
consume(TokenType::CurlyClose);
15261533

Libraries/LibJS/Tests/switch-basic.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,11 @@ describe("basic switch tests", () => {
6868
expect(i).toBe(5);
6969
});
7070
});
71+
72+
describe("errors", () => {
73+
test("syntax errors", () => {
74+
expect("switch () {}").not.toEval();
75+
expect("switch (foo) { bar }").not.toEval();
76+
expect("switch (foo) { default: default: }").not.toEval();
77+
});
78+
});

0 commit comments

Comments
 (0)