feat: support pure virtual destructors

pull/708/head
Amaan Qureshi 2024-04-14 15:32:20 +07:00
parent aa79a170c6
commit 1c3c93d727
2 changed files with 13 additions and 3 deletions

@ -497,6 +497,7 @@ module.exports = grammar(C, {
field('body', choice($.compound_statement, $.try_statement)),
$.default_method_clause,
$.delete_method_clause,
$.pure_virtual_clause,
),
),
@ -542,6 +543,7 @@ module.exports = grammar(C, {
alias($.constructor_try_statement, $.try_statement),
$.default_method_clause,
$.delete_method_clause,
$.pure_virtual_clause,
),
),
@ -553,6 +555,7 @@ module.exports = grammar(C, {
default_method_clause: _ => seq('=', 'default', ';'),
delete_method_clause: _ => seq('=', 'delete', ';'),
pure_virtual_clause: _ => seq('=', '0', ';'),
friend_declaration: $ => seq(
'friend',
@ -1170,7 +1173,7 @@ module.exports = grammar(C, {
];
return choice(
...original.members,
original,
...table.map(([operator, precedence]) => {
return prec.left(precedence, seq(
field('left', $._expression),

@ -179,7 +179,7 @@ class C {
(identifier))))))))
================================================================================
Default and deleted methods
Default, delete, and pure virtual methods
================================================================================
class A : public B {
@ -188,6 +188,7 @@ class A : public B {
void f() = delete;
A& operator=(const A&) = default;
A& operator=(A&&) = delete;
~A() = 0;
};
--------------------------------------------------------------------------------
@ -238,7 +239,13 @@ class A : public B {
(parameter_declaration
(type_identifier)
(abstract_reference_declarator)))))
(delete_method_clause)))))
(delete_method_clause))
(function_definition
(function_declarator
(destructor_name
(identifier))
(parameter_list))
(pure_virtual_clause)))))
================================================================================
Destructor definitions