|  | /******************************************************************************* | 
|  | * Copyright (c) 2010 Luaj.org. All rights reserved. | 
|  | * | 
|  | * Permission is hereby granted, free of charge, to any person obtaining a copy | 
|  | * of this software and associated documentation files (the "Software"), to deal | 
|  | * in the Software without restriction, including without limitation the rights | 
|  | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
|  | * copies of the Software, and to permit persons to whom the Software is | 
|  | * furnished to do so, subject to the following conditions: | 
|  | * | 
|  | * The above copyright notice and this permission notice shall be included in | 
|  | * all copies or substantial portions of the Software. | 
|  | * | 
|  | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
|  | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
|  | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
|  | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
|  | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
|  | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
|  | * THE SOFTWARE. | 
|  | ******************************************************************************/ | 
|  | package org.luaj.vm2.ast; | 
|  |  | 
|  | import java.util.List; | 
|  |  | 
|  | import org.luaj.vm2.ast.Exp.VarExp; | 
|  |  | 
|  | abstract public class Visitor { | 
|  | public void visit(Chunk chunk) { | 
|  | chunk.block.accept(this); | 
|  | }; | 
|  | public void visit(Block block) { | 
|  | visit(block.scope); | 
|  | if ( block.stats != null ) | 
|  | for ( int i=0, n=block.stats.size(); i<n; i++ ) | 
|  | ((Stat)block.stats.get(i)).accept(this); | 
|  | }; | 
|  | public void visit(Stat.Assign stat) { | 
|  | visitVars(stat.vars); | 
|  | visitExps(stat.exps); | 
|  | } | 
|  | public void visit(Stat.Break breakstat) { | 
|  | } | 
|  | public void visit(Stat.FuncCallStat stat) { | 
|  | stat.funccall.accept(this); | 
|  | } | 
|  | public void visit(Stat.FuncDef stat) { | 
|  | stat.body.accept(this); | 
|  | } | 
|  | public void visit(Stat.GenericFor stat) { | 
|  | visit(stat.scope); | 
|  | visitNames(stat.names); | 
|  | visitExps(stat.exps); | 
|  | stat.block.accept(this); | 
|  | } | 
|  | public void visit(Stat.IfThenElse stat) { | 
|  | stat.ifexp.accept(this); | 
|  | stat.ifblock.accept(this); | 
|  | if ( stat.elseifblocks != null ) | 
|  | for ( int i=0, n=stat.elseifblocks.size(); i<n; i++ ) { | 
|  | ((Exp)stat.elseifexps.get(i)).accept(this); | 
|  | ((Block)stat.elseifblocks.get(i)).accept(this); | 
|  | } | 
|  | if ( stat.elseblock != null ) | 
|  | visit( stat.elseblock ); | 
|  | } | 
|  | public void visit(Stat.LocalAssign stat) { | 
|  | visitNames(stat.names); | 
|  | visitExps(stat.values); | 
|  | } | 
|  | public void visit(Stat.LocalFuncDef stat) { | 
|  | visit(stat.name); | 
|  | stat.body.accept(this); | 
|  | } | 
|  | public void visit(Stat.NumericFor stat) { | 
|  | visit(stat.scope); | 
|  | visit(stat.name); | 
|  | stat.initial.accept(this); | 
|  | stat.limit.accept(this); | 
|  | if ( stat.step != null ) | 
|  | stat.step.accept(this); | 
|  | stat.block.accept(this); | 
|  | } | 
|  | public void visit(Stat.RepeatUntil stat) { | 
|  | stat.block.accept(this); | 
|  | stat.exp.accept(this); | 
|  | } | 
|  | public void visit(Stat.Return stat) { | 
|  | visitExps(stat.values); | 
|  | } | 
|  | public void visit(Stat.WhileDo stat) { | 
|  | stat.exp.accept(this); | 
|  | stat.block.accept(this); | 
|  | } | 
|  | public void visit(FuncBody body) { | 
|  | visit(body.scope); | 
|  | body.parlist.accept(this); | 
|  | body.block.accept(this); | 
|  | } | 
|  | public void visit(FuncArgs args) { | 
|  | visitExps(args.exps); | 
|  | } | 
|  | public void visit(TableField field) { | 
|  | if ( field.name != null ); | 
|  | visit( field.name ); | 
|  | if ( field.index != null ) | 
|  | field.index.accept(this); | 
|  | field.rhs.accept(this); | 
|  | } | 
|  | public void visit(Exp.AnonFuncDef exp) { | 
|  | exp.body.accept(this); | 
|  | } | 
|  | public void visit(Exp.BinopExp exp) { | 
|  | exp.lhs.accept(this); | 
|  | exp.rhs.accept(this); | 
|  | } | 
|  | public void visit(Exp.Constant exp) { | 
|  | } | 
|  | public void visit(Exp.FieldExp exp) { | 
|  | exp.lhs.accept(this); | 
|  | visit(exp.name); | 
|  | } | 
|  | public void visit(Exp.FuncCall exp) { | 
|  | exp.lhs.accept(this); | 
|  | exp.args.accept(this); | 
|  | } | 
|  | public void visit(Exp.IndexExp exp) { | 
|  | exp.lhs.accept(this); | 
|  | exp.exp.accept(this); | 
|  | } | 
|  | public void visit(Exp.MethodCall exp) { | 
|  | exp.lhs.accept(this); | 
|  | visit(exp.name); | 
|  | exp.args.accept(this); | 
|  | } | 
|  | public void visit(Exp.NameExp exp) { | 
|  | visit(exp.name); | 
|  | } | 
|  | public void visit(Exp.ParensExp exp) { | 
|  | exp.exp.accept(this); | 
|  | } | 
|  | public void visit(Exp.UnopExp exp) { | 
|  | exp.rhs.accept(this); | 
|  | } | 
|  | public void visit(Exp.VarargsExp exp) { | 
|  | } | 
|  | public void visit(ParList pars) { | 
|  | visitNames(pars.names); | 
|  | } | 
|  | public void visit(TableConstructor table) { | 
|  | if( table.fields != null) | 
|  | for ( int i=0, n=table.fields.size(); i<n; i++ ) | 
|  | ((TableField)table.fields.get(i)).accept(this); | 
|  | } | 
|  | public void visitVars(List<VarExp> vars) { | 
|  | if ( vars != null ) | 
|  | for ( int i=0, n=vars.size(); i<n; i++ ) | 
|  | ((Exp.VarExp)vars.get(i)).accept(this); | 
|  | } | 
|  | public void visitExps(List<Exp> exps) { | 
|  | if ( exps != null ) | 
|  | for ( int i=0, n=exps.size(); i<n; i++ ) | 
|  | ((Exp)exps.get(i)).accept(this); | 
|  | } | 
|  | public void visitNames(List<Name> names) { | 
|  | if ( names != null ) | 
|  | for ( int i=0, n=names.size(); i<n; i++ ) | 
|  | visit((Name) names.get(i)); | 
|  | } | 
|  | public void visit(Name name) { | 
|  | } | 
|  | public void visit(String name) { | 
|  | } | 
|  | public void visit(NameScope scope) { | 
|  | } | 
|  | public void visit(Stat.Goto gotostat) { | 
|  | } | 
|  | public void visit(Stat.Label label) { | 
|  | } | 
|  | } |