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, $._expression,
), ),
field_expression: $ => seq( field_expression: $ => prec.right(seq(
prec(PREC.FIELD, seq( prec(PREC.FIELD, seq(
field('argument', $._expression), field('argument', $._expression),
field('operator', choice('.', '.*', '->')), field('operator', choice('.', '.*', '->')),
)), )),
field('field', choice( field('field', choice(
$._field_identifier, $._field_identifier,
alias($.qualified_field_identifier, $.qualified_identifier),
$.destructor_name, $.destructor_name,
$.template_method, $.template_method,
alias($.dependent_field_identifier, $.dependent_name), alias($.dependent_field_identifier, $.dependent_name),
)), )),
), )),
type_requirement: $ => seq('typename', $._class_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, $._scope_resolution,
field('name', choice( field('name', choice(
alias($.dependent_field_identifier, $.dependent_name), alias($.dependent_field_identifier, $.dependent_name),
@ -1220,7 +1221,7 @@ module.exports = grammar(C, {
$.template_method, $.template_method,
$._field_identifier, $._field_identifier,
)), )),
), )),
qualified_identifier: $ => seq( qualified_identifier: $ => seq(
$._scope_resolution, $._scope_resolution,

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