diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2018-10-26 14:08:59 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2019-05-17 11:08:27 +0200 |
commit | f75cfa14878cc2d57ae21e6e1aaf4f99477b65aa (patch) | |
tree | b1374063d48c9c27972fd6cfe7a9047a1641310a | |
parent | a929a44437a46eb9f814160c4ecf807a94ba2138 (diff) | |
download | vala-wip/traverse-visitor.tar.gz |
Add TraverseVisitor for traversing the tree with a callbackwip/traverse-visitor
This will allow cleaning up virtual methods of code nodes
and more stateful to stateless code conversion.
-rw-r--r-- | vala/Makefile.am | 1 | ||||
-rw-r--r-- | vala/valatraversevisitor.vala | 387 |
2 files changed, 388 insertions, 0 deletions
diff --git a/vala/Makefile.am b/vala/Makefile.am index 7fb1e26f7..10102777e 100644 --- a/vala/Makefile.am +++ b/vala/Makefile.am @@ -159,6 +159,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); |