Skip to content

Commit 2947147

Browse files
committed
fix(typescript): fix crash on optional parameter named 'readonly'
1 parent 7d595c0 commit 2947147

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

docs/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ Semantic Versioning.
125125
assertion failure.
126126
* Subnamespaces can now be named contextual keywords such as `string`.
127127
* Import aliases can now be named contextual keywords such as `implements`.
128+
* Optional function parameters can now be named contextual keywords such as
129+
`readonly`.
128130
* Import aliases can now be declared with `import type`.
129131
* Namespace aliases can now reference variables named contextual keywords such as
130132
`yield` inside namespaces.

src/quick-lint-js/fe/parse-statement.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2530,10 +2530,12 @@ void Parser::parse_and_visit_function_parameters(
25302530
switch (this->peek().type) {
25312531
// function foo(paramName = def) {}
25322532
// function foo(paramName: any) {} // TypeScript only.
2533+
// function foo(paramName?) {} // TypeScript only.
25332534
// function foo(paramName) {}
25342535
case Token_Type::colon:
25352536
case Token_Type::comma:
25362537
case Token_Type::equal:
2538+
case Token_Type::question:
25372539
case Token_Type::right_paren:
25382540
return true;
25392541

test/test-parse-typescript-function.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,16 @@ TEST_F(Test_Parse_TypeScript_Function, optional_parameter) {
760760
}));
761761
}
762762

763+
for (String8_View parameter_name : contextual_keywords) {
764+
Spy_Visitor p = test_parse_and_visit_statement(
765+
concat(u8"function f("_sv, parameter_name, u8"?) {}"_sv), no_diags,
766+
typescript_options);
767+
EXPECT_THAT(p.variable_declarations, ElementsAreArray({
768+
func_param_decl(parameter_name),
769+
function_decl(u8"f"_sv),
770+
}));
771+
}
772+
763773
{
764774
Spy_Visitor p = test_parse_and_visit_statement(
765775
u8"(param?) => {}"_sv, no_diags, typescript_options);

0 commit comments

Comments
 (0)