From: Rico Tzschichholz Date: Fri, 26 Oct 2018 12:08:59 +0000 (+0200) Subject: Add TraverseVisitor for traversing the tree with a callback X-Git-Tag: 0.49.90~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48f998205e397dc3f86de7c1f1c02eded16245ff;p=thirdparty%2Fvala.git 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. --- diff --git a/vala/Makefile.am b/vala/Makefile.am index 0191fc9aa..3e8e99dbe 100644 --- a/vala/Makefile.am +++ b/vala/Makefile.am @@ -164,6 +164,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..ae2a7c07b --- /dev/null +++ b/vala/valatraversevisitor.vala @@ -0,0 +1,393 @@ +/* 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 + */ + +/** + * 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_with_statement (WithStatement 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);