Browse Source

Merge 65697b795d into 8b5b49eb19

pull/360/merge
Niclas Larsson 1 month ago
committed by GitHub
parent
commit
af9a043f28
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
2 changed files with 119 additions and 1 deletions
  1. +3
    -1
      grammar.js
  2. +116
    -0
      test/corpus/expressions.txt

+ 3
- 1
grammar.js View File

@ -105,6 +105,7 @@ module.exports = grammar(C, {
[$.qualified_field_identifier, $.template_method, $.template_type],
[$.type_specifier, $.template_type, $.template_function, $.expression],
[$.splice_type_specifier, $.splice_expression],
[$.destructor_name],
],
inline: ($, original) => original.concat([
@ -1379,7 +1380,7 @@ module.exports = grammar(C, {
')',
),
destructor_name: $ => prec(1, seq('~', $.identifier)),
destructor_name: $ => prec(1, seq('~', $.identifier, optional($.template_argument_list))),
compound_literal_expression: ($, original) => choice(
original,
@ -1414,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),
)),
),

+ 116
- 0
test/corpus/expressions.txt View File

@ -1723,3 +1723,119 @@ template void negateValues(Args... args) {
(identifier)))
(string_literal
(string_content))))))))))
================================================================================
Explicit destructor calls with template arguments
================================================================================
int main() {
a->~Baz<int>();
b.~Qux<int, float>();
c->~Box<vector<int>>();
}
--------------------------------------------------------------------------------
(translation_unit
(function_definition
(primitive_type)
(function_declarator
(identifier)
(parameter_list))
(compound_statement
(expression_statement
(call_expression
(field_expression
(identifier)
(destructor_name
(identifier)
(template_argument_list
(type_descriptor
(primitive_type)))))
(argument_list)))
(expression_statement
(call_expression
(field_expression
(identifier)
(destructor_name
(identifier)
(template_argument_list
(type_descriptor
(primitive_type))
(type_descriptor
(primitive_type)))))
(argument_list)))
(expression_statement
(call_expression
(field_expression
(identifier)
(destructor_name
(identifier)
(template_argument_list
(type_descriptor
(template_type
(type_identifier)
(template_argument_list
(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))))))

Loading…
Cancel
Save