fix: allow qualified identifiers in field expressions

pull/708/head
Amaan Qureshi 2024-02-18 08:13:15 +07:00
parent 1ef1791b3c
commit d51470929e
2 changed files with 15 additions and 4 deletions

@ -996,18 +996,19 @@ module.exports = grammar(C, {
$._expression,
),
field_expression: $ => seq(
field_expression: $ => prec.right(seq(
prec(PREC.FIELD, seq(
field('argument', $._expression),
field('operator', choice('.', '.*', '->')),
)),
field('field', choice(
$._field_identifier,
alias($.qualified_field_identifier, $.qualified_identifier),
$.destructor_name,
$.template_method,
alias($.dependent_field_identifier, $.dependent_name),
)),
),
)),
type_requirement: $ => seq('typename', $._class_name),
@ -1212,7 +1213,7 @@ module.exports = grammar(C, {
'::',
)),
qualified_field_identifier: $ => seq(
qualified_field_identifier: $ => prec.right(seq(
$._scope_resolution,
field('name', choice(
alias($.dependent_field_identifier, $.dependent_name),
@ -1220,7 +1221,7 @@ module.exports = grammar(C, {
$.template_method,
$._field_identifier,
)),
),
)),
qualified_identifier: $ => seq(
$._scope_resolution,

@ -2111,6 +2111,8 @@ int main() {
(obj.*member_function_ptr)(42); // 84
this->Base::f();
return 0;
}
@ -2170,6 +2172,14 @@ int main() {
(argument_list
(number_literal))))
(comment)
(expression_statement
(call_expression
(field_expression
(this)
(qualified_identifier
(namespace_identifier)
(field_identifier)))
(argument_list)))
(return_statement
(number_literal)))))