diff --git a/grammar.js b/grammar.js index 36d2343..180b598 100644 --- a/grammar.js +++ b/grammar.js @@ -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), )), ), diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index b627515..8209292 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -1779,3 +1779,63 @@ int main() { (type_descriptor (primitive_type)))))))) (argument_list)))))) + +================================================================================ +Qualified explicit destructor calls +================================================================================ + +int main() { + p->std::vector::~vector(); + q->A::~A(); + r->A::~A(); +} + +-------------------------------------------------------------------------------- + +(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))))))