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

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