From 1c3c93d727c3bb833b224b062fd1f20eb085f962 Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Sun, 14 Apr 2024 15:32:20 -0400 Subject: [PATCH] feat: support pure virtual destructors --- grammar.js | 5 ++++- test/corpus/definitions.txt | 11 +++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/grammar.js b/grammar.js index c217312..9f3b6e9 100644 --- a/grammar.js +++ b/grammar.js @@ -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), diff --git a/test/corpus/definitions.txt b/test/corpus/definitions.txt index bf76367..bc35c2a 100644 --- a/test/corpus/definitions.txt +++ b/test/corpus/definitions.txt @@ -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