Bladeren bron

fix: parse qualified explicit destructor calls

A qualified destructor-id in an explicit destructor call via `->`/`.`, e.g.
`p->std::vector<int>::~vector()` or `p->A::~A()`, produced an ERROR node.
`qualified_identifier` already accepts a trailing `destructor_name`, but
`qualified_field_identifier` (the member-access path) did not; mirror it there.
pull/360/head
Niclas 1 maand geleden
bovenliggende
commit
65697b795d
2 gewijzigde bestanden met toevoegingen van 61 en 0 verwijderingen
  1. +1
    -0
      grammar.js
  2. +60
    -0
      test/corpus/expressions.txt

+ 1
- 0
grammar.js Bestand weergeven

@ -1415,6 +1415,7 @@ module.exports = grammar(C, {
alias($.dependent_field_identifier, $.dependent_name),
alias($.qualified_field_identifier, $.qualified_identifier),
$.template_method,
$.destructor_name,
prec.dynamic(2, $._field_identifier),
)),
),

+ 60
- 0
test/corpus/expressions.txt Bestand weergeven

@ -1779,3 +1779,63 @@ int main() {
(type_descriptor
(primitive_type))))))))
(argument_list))))))
================================================================================
Qualified explicit destructor calls
================================================================================
int main() {
p->std::vector<int>::~vector();
q->A::~A();
r->A<int>::~A<int>();
}
--------------------------------------------------------------------------------
(translation_unit
(function_definition
(primitive_type)
(function_declarator
(identifier)
(parameter_list))
(compound_statement
(expression_statement
(call_expression
(field_expression
(identifier)
(qualified_identifier
(namespace_identifier)
(qualified_identifier
(template_type
(type_identifier)
(template_argument_list
(type_descriptor
(primitive_type))))
(destructor_name
(identifier)))))
(argument_list)))
(expression_statement
(call_expression
(field_expression
(identifier)
(qualified_identifier
(namespace_identifier)
(destructor_name
(identifier))))
(argument_list)))
(expression_statement
(call_expression
(field_expression
(identifier)
(qualified_identifier
(template_type
(type_identifier)
(template_argument_list
(type_descriptor
(primitive_type))))
(destructor_name
(identifier)
(template_argument_list
(type_descriptor
(primitive_type))))))
(argument_list))))))

Laden…
Annuleren
Opslaan