/* This file is part of the db4o object database http://www.db4o.com Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com db4o is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation. db4o 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ package EDU.purdue.cs.bloat.editor; /** * The visitor pattern allows functionality to be added to a number of classes * (or in this case one class, <tt>Instruction</tt>, that can vary in * behavior) without modifying the classes themselves. Additionally, the visitor * pattern simulates double dispatching. For instance <tt>visit</tt> method of * <tt>Instruction</tt> calls a particular method of * <tt>InstructionVisitor</tt> based on the <tt>Instruction</tt>'s opcode. * <p> * <tt>InstructionVisitor</tt> provides an interface for performing actions * based on the instruction type. Classes implementing this interface should not * be able to miss any of the instruction types. This interface was created as * an alternative to having 138 different subtypes of Instruction. * * @see Instruction#visit * @see EDU.purdue.cs.bloat.tree.Tree * * @author Nate Nystrom (<a * href="mailto:nystrom@cs.purdue.edu">nystrom@cs.purdue.edu</a>) */ public interface InstructionVisitor { public void visit_nop(Instruction inst); public void visit_ldc(Instruction inst); public void visit_iload(Instruction inst); public void visit_lload(Instruction inst); public void visit_fload(Instruction inst); public void visit_dload(Instruction inst); public void visit_aload(Instruction inst); public void visit_iaload(Instruction inst); public void visit_laload(Instruction inst); public void visit_faload(Instruction inst); public void visit_daload(Instruction inst); public void visit_aaload(Instruction inst); public void visit_baload(Instruction inst); public void visit_caload(Instruction inst); public void visit_saload(Instruction inst); public void visit_istore(Instruction inst); public void visit_lstore(Instruction inst); public void visit_fstore(Instruction inst); public void visit_dstore(Instruction inst); public void visit_astore(Instruction inst); public void visit_iastore(Instruction inst); public void visit_lastore(Instruction inst); public void visit_fastore(Instruction inst); public void visit_dastore(Instruction inst); public void visit_aastore(Instruction inst); public void visit_bastore(Instruction inst); public void visit_castore(Instruction inst); public void visit_sastore(Instruction inst); public void visit_pop(Instruction inst); public void visit_pop2(Instruction inst); public void visit_dup(Instruction inst); public void visit_dup_x1(Instruction inst); public void visit_dup_x2(Instruction inst); public void visit_dup2(Instruction inst); public void visit_dup2_x1(Instruction inst); public void visit_dup2_x2(Instruction inst); public void visit_swap(Instruction inst); public void visit_iadd(Instruction inst); public void visit_ladd(Instruction inst); public void visit_fadd(Instruction inst); public void visit_dadd(Instruction inst); public void visit_isub(Instruction inst); public void visit_lsub(Instruction inst); public void visit_fsub(Instruction inst); public void visit_dsub(Instruction inst); public void visit_imul(Instruction inst); public void visit_lmul(Instruction inst); public void visit_fmul(Instruction inst); public void visit_dmul(Instruction inst); public void visit_idiv(Instruction inst); public void visit_ldiv(Instruction inst); public void visit_fdiv(Instruction inst); public void visit_ddiv(Instruction inst); public void visit_irem(Instruction inst); public void visit_lrem(Instruction inst); public void visit_frem(Instruction inst); public void visit_drem(Instruction inst); public void visit_ineg(Instruction inst); public void visit_lneg(Instruction inst); public void visit_fneg(Instruction inst); public void visit_dneg(Instruction inst); public void visit_ishl(Instruction inst); public void visit_lshl(Instruction inst); public void visit_ishr(Instruction inst); public void visit_lshr(Instruction inst); public void visit_iushr(Instruction inst); public void visit_lushr(Instruction inst); public void visit_iand(Instruction inst); public void visit_land(Instruction inst); public void visit_ior(Instruction inst); public void visit_lor(Instruction inst); public void visit_ixor(Instruction inst); public void visit_lxor(Instruction inst); public void visit_iinc(Instruction inst); public void visit_i2l(Instruction inst); public void visit_i2f(Instruction inst); public void visit_i2d(Instruction inst); public void visit_l2i(Instruction inst); public void visit_l2f(Instruction inst); public void visit_l2d(Instruction inst); public void visit_f2i(Instruction inst); public void visit_f2l(Instruction inst); public void visit_f2d(Instruction inst); public void visit_d2i(Instruction inst); public void visit_d2l(Instruction inst); public void visit_d2f(Instruction inst); public void visit_i2b(Instruction inst); public void visit_i2c(Instruction inst); public void visit_i2s(Instruction inst); public void visit_lcmp(Instruction inst); public void visit_fcmpl(Instruction inst); public void visit_fcmpg(Instruction inst); public void visit_dcmpl(Instruction inst); public void visit_dcmpg(Instruction inst); public void visit_ifeq(Instruction inst); public void visit_ifne(Instruction inst); public void visit_iflt(Instruction inst); public void visit_ifge(Instruction inst); public void visit_ifgt(Instruction inst); public void visit_ifle(Instruction inst); public void visit_if_icmpeq(Instruction inst); public void visit_if_icmpne(Instruction inst); public void visit_if_icmplt(Instruction inst); public void visit_if_icmpge(Instruction inst); public void visit_if_icmpgt(Instruction inst); public void visit_if_icmple(Instruction inst); public void visit_if_acmpeq(Instruction inst); public void visit_if_acmpne(Instruction inst); public void visit_goto(Instruction inst); public void visit_jsr(Instruction inst); public void visit_ret(Instruction inst); public void visit_switch(Instruction inst); public void visit_ireturn(Instruction inst); public void visit_lreturn(Instruction inst); public void visit_freturn(Instruction inst); public void visit_dreturn(Instruction inst); public void visit_areturn(Instruction inst); public void visit_return(Instruction inst); public void visit_getstatic(Instruction inst); public void visit_putstatic(Instruction inst); public void visit_putstatic_nowb(Instruction inst); public void visit_getfield(Instruction inst); public void visit_putfield(Instruction inst); public void visit_putfield_nowb(Instruction inst); public void visit_invokevirtual(Instruction inst); public void visit_invokespecial(Instruction inst); public void visit_invokestatic(Instruction inst); public void visit_invokeinterface(Instruction inst); public void visit_new(Instruction inst); public void visit_newarray(Instruction inst); public void visit_arraylength(Instruction inst); public void visit_athrow(Instruction inst); public void visit_checkcast(Instruction inst); public void visit_instanceof(Instruction inst); public void visit_monitorenter(Instruction inst); public void visit_monitorexit(Instruction inst); public void visit_multianewarray(Instruction inst); public void visit_ifnull(Instruction inst); public void visit_ifnonnull(Instruction inst); public void visit_rc(Instruction inst); public void visit_aupdate(Instruction inst); public void visit_supdate(Instruction inst); public void visit_aswizzle(Instruction inst); public void visit_aswrange(Instruction inst); }