From 6ea4e6b2b08cc73ae828d157b4475aa19e3dd030 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Sun, 27 Apr 2014 23:19:11 -0700 Subject: [PATCH] Give rules::Visitor a virtual destructor --- examples/grammars/helpers.cc | 16 ++++++++-------- examples/grammars/helpers.h | 2 +- src/compiler/rules/visitor.cc | 4 +++- src/compiler/rules/visitor.h | 1 + 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/examples/grammars/helpers.cc b/examples/grammars/helpers.cc index ffb52321..5176b970 100644 --- a/examples/grammars/helpers.cc +++ b/examples/grammars/helpers.cc @@ -2,38 +2,38 @@ namespace tree_sitter_examples { using namespace tree_sitter::rules; - + rule_ptr comma_sep1(rule_ptr element) { return seq({ element, repeat(seq({ str(","), element })) }); } - + rule_ptr comma_sep(rule_ptr element) { return choice({ comma_sep1(element), blank() }); } - + rule_ptr optional(rule_ptr rule) { return choice({ rule, blank() }); } - + rule_ptr in_parens(rule_ptr rule) { return seq({ str("("), rule, str(")") }); } - + rule_ptr in_braces(rule_ptr rule) { return seq({ str("{"), rule, str("}") }); } - + rule_ptr in_brackets(rule_ptr rule) { return seq({ str("["), rule, str("]") }); } - + rule_ptr infix(int precedence, std::string op) { return prec(precedence, seq({ sym("expression"), str(op), sym("expression") })); } - + rule_ptr prefix(int precedence, std::string op) { return prec(precedence, seq({ str(op), diff --git a/examples/grammars/helpers.h b/examples/grammars/helpers.h index e4b7e60a..f41d118e 100644 --- a/examples/grammars/helpers.h +++ b/examples/grammars/helpers.h @@ -5,7 +5,7 @@ namespace tree_sitter_examples { using namespace tree_sitter::rules; - + rule_ptr comma_sep1(rule_ptr element); rule_ptr comma_sep(rule_ptr element); rule_ptr optional(rule_ptr rule); diff --git a/src/compiler/rules/visitor.cc b/src/compiler/rules/visitor.cc index 4e74bc39..04cfc5e0 100644 --- a/src/compiler/rules/visitor.cc +++ b/src/compiler/rules/visitor.cc @@ -12,8 +12,10 @@ namespace tree_sitter { using std::vector; - + namespace rules { + Visitor::~Visitor() {} + rule_ptr IdentityRuleFn::default_apply(const Rule *rule) { return rule->copy(); } diff --git a/src/compiler/rules/visitor.h b/src/compiler/rules/visitor.h index 44a02d01..a7538958 100644 --- a/src/compiler/rules/visitor.h +++ b/src/compiler/rules/visitor.h @@ -28,6 +28,7 @@ namespace tree_sitter { virtual void visit(const String *rule) = 0; virtual void visit(const Symbol *rule) = 0; virtual void visit(const ISymbol *rule) = 0; + virtual ~Visitor(); }; template