[vala/0.48] Add TraverseVisitor for traversing the tree with a callback
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.48] Add TraverseVisitor for traversing the tree with a callback
- Date: Sat, 29 Aug 2020 18:47:25 +0000 (UTC)
commit 7b6963100ab21cced8aa240903421c19c91c05b3
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Fri Oct 26 14:08:59 2018 +0200
Add TraverseVisitor for traversing the tree with a callback
This will allow cleaning up virtual methods of code nodes
and more stateful to stateless code conversion.
vala/Makefile.am | 1 +
vala/valatraversevisitor.vala | 387 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 388 insertions(+)
---
diff --git a/vala/Makefile.am b/vala/Makefile.am
index 78e4c9390..9bb3a01f6 100644
--- a/vala/Makefile.am
+++ b/vala/Makefile.am
@@ -163,6 +163,7 @@ libvala_la_VALASOURCES = \
valatemplate.vala \
valathrowstatement.vala \
valatokentype.vala \
+ valatraversevisitor.vala \
valatrystatement.vala \
valatuple.vala \
valatypecheck.vala \
diff --git a/vala/valatraversevisitor.vala b/vala/valatraversevisitor.vala
new file mode 100644
index 000000000..d604d68fb
--- /dev/null
+++ b/vala/valatraversevisitor.vala
@@ -0,0 +1,387 @@
+/* valatraversevisitor.vala
+ *
+ * Copyright (C) 2012 Luca Bruno
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Luca Bruno <lucabru src gnome org>
+ */
+
+/**
+ * Code visitor for traversing the tree with a simple callback
+ */
+public class Vala.TraverseVisitor : CodeVisitor {
+ private TraverseFunc func;
+
+ public TraverseVisitor (owned TraverseFunc func) {
+ this.func = (owned) func;
+ }
+
+ public override void visit_namespace (Namespace ns) {
+ if (func (ns) == TraverseStatus.CONTINUE) {
+ ns.accept_children (this);
+ }
+ }
+
+ public override void visit_class (Class cl) {
+ if (func (cl) == TraverseStatus.CONTINUE) {
+ cl.accept_children (this);
+ }
+ }
+
+ public override void visit_struct (Struct st) {
+ if (func (st) == TraverseStatus.CONTINUE) {
+ st.accept_children (this);
+ }
+ }
+
+ public override void visit_interface (Interface iface) {
+ if (func (iface) == TraverseStatus.CONTINUE) {
+ iface.accept_children (this);
+ }
+ }
+
+ public override void visit_enum (Enum en) {
+ if (func (en) == TraverseStatus.CONTINUE) {
+ en.accept_children (this);
+ }
+ }
+
+ public override void visit_enum_value (EnumValue ev) {
+ if (func (ev) == TraverseStatus.CONTINUE) {
+ ev.accept_children (this);
+ }
+ }
+
+ public override void visit_error_domain (ErrorDomain edomain) {
+ if (func (edomain) == TraverseStatus.CONTINUE) {
+ edomain.accept_children (this);
+ }
+ }
+
+ public override void visit_error_code (ErrorCode ecode) {
+ if (func (ecode) == TraverseStatus.CONTINUE) {
+ ecode.accept_children (this);
+ }
+ }
+
+ public override void visit_delegate (Delegate d) {
+ if (func (d) == TraverseStatus.CONTINUE) {
+ d.accept_children (this);
+ }
+ }
+
+ public override void visit_constant (Constant c) {
+ if (func (c) == TraverseStatus.CONTINUE) {
+ c.accept_children (this);
+ }
+ }
+
+ public override void visit_field (Field f) {
+ if (func (f) == TraverseStatus.CONTINUE) {
+ f.accept_children (this);
+ }
+ }
+
+ public override void visit_method (Method m) {
+ if (func (m) == TraverseStatus.CONTINUE) {
+ m.accept_children (this);
+ }
+ }
+
+ public override void visit_creation_method (CreationMethod m) {
+ if (func (m) == TraverseStatus.CONTINUE) {
+ m.accept_children (this);
+ }
+ }
+
+ public override void visit_formal_parameter (Parameter p) {
+ if (func (p) == TraverseStatus.CONTINUE) {
+ p.accept_children (this);
+ }
+ }
+
+ public override void visit_property (Property prop) {
+ if (func (prop) == TraverseStatus.CONTINUE) {
+ prop.accept_children (this);
+ }
+ }
+
+ public override void visit_property_accessor (PropertyAccessor acc) {
+ if (func (acc) == TraverseStatus.CONTINUE) {
+ acc.accept_children (this);
+ }
+ }
+
+ public override void visit_signal (Signal sig) {
+ if (func (sig) == TraverseStatus.CONTINUE) {
+ sig.accept_children (this);
+ }
+ }
+
+ public override void visit_constructor (Constructor c) {
+ if (func (c) == TraverseStatus.CONTINUE) {
+ c.accept_children (this);
+ }
+ }
+
+ public override void visit_destructor (Destructor d) {
+ if (func (d) == TraverseStatus.CONTINUE) {
+ d.accept_children (this);
+ }
+ }
+
+ public override void visit_block (Block b) {
+ if (func (b) == TraverseStatus.CONTINUE) {
+ b.accept_children (this);
+ }
+ }
+
+ public override void visit_declaration_statement (DeclarationStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_local_variable (LocalVariable local) {
+ if (func (local) == TraverseStatus.CONTINUE) {
+ local.accept_children (this);
+ }
+ }
+
+ public override void visit_initializer_list (InitializerList list) {
+ if (func (list) == TraverseStatus.CONTINUE) {
+ list.accept_children (this);
+ }
+ }
+
+ public override void visit_expression_statement (ExpressionStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_if_statement (IfStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_switch_statement (SwitchStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_switch_section (SwitchSection section) {
+ if (func (section) == TraverseStatus.CONTINUE) {
+ section.accept_children (this);
+ }
+ }
+
+ public override void visit_switch_label (SwitchLabel label) {
+ if (func (label) == TraverseStatus.CONTINUE) {
+ label.accept_children (this);
+ }
+ }
+
+ public override void visit_loop (Loop loop) {
+ if (func (loop) == TraverseStatus.CONTINUE) {
+ loop.accept_children (this);
+ }
+ }
+
+ public override void visit_while_statement (WhileStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_do_statement (DoStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_for_statement (ForStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_foreach_statement (ForeachStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_break_statement (BreakStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_continue_statement (ContinueStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_return_statement (ReturnStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_yield_statement (YieldStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_throw_statement (ThrowStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_try_statement (TryStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_catch_clause (CatchClause clause) {
+ if (func (clause) == TraverseStatus.CONTINUE) {
+ clause.accept_children (this);
+ }
+ }
+
+ public override void visit_lock_statement (LockStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_unlock_statement (UnlockStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_delete_statement (DeleteStatement stmt) {
+ if (func (stmt) == TraverseStatus.CONTINUE) {
+ stmt.accept_children (this);
+ }
+ }
+
+ public override void visit_member_access (MemberAccess expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_assignment (Assignment expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_method_call (MethodCall expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_conditional_expression (ConditionalExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_binary_expression (BinaryExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_unary_expression (UnaryExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_reference_transfer_expression (ReferenceTransferExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_object_creation_expression (ObjectCreationExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_postfix_expression (PostfixExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_array_creation_expression (ArrayCreationExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_cast_expression (CastExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_element_access (ElementAccess expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_lambda_expression (LambdaExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_pointer_indirection (PointerIndirection expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+
+ public override void visit_slice_expression (SliceExpression expr) {
+ if (func (expr) == TraverseStatus.CONTINUE) {
+ expr.accept_children (this);
+ }
+ }
+}
+
+public enum Vala.TraverseStatus {
+ STOP,
+ CONTINUE
+}
+
+public delegate Vala.TraverseStatus Vala.TraverseFunc (CodeNode node);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]