1 cananian 1.1.2.1 // OperVisitor.java, created Sat Sep 19 04:49:05 1998 by cananian
  2 cananian 1.1.2.1 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
  3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
  4 cananian 1.1.2.1 package harpoon.IR.Quads;
  5 cananian 1.1.2.1 
  6 cananian 1.1.2.1 /**
  7 cananian 1.1.2.1  * An <code>OperVisitor</code> is a visitor pattern for opcodes of the OPER 
  8 cananian 1.1.2.1  * quad.  By default, all <code>visit_*</code> methods invoke
  9 cananian 1.1.2.1  * <code>visit_default</code>; this can (and should) be changed by
 10 cananian 1.1.2.1  * overriding particular <code>visit_*</code> methods.  The
 11 cananian 1.1.2.1  * <code>visit_unknown</code> method is your ticket to extending OPER's
 12 cananian 1.1.2.1  * set of opcodes.  By default it throws an <code>Error</code>, but you
 13 cananian 1.1.2.1  * can subclass OperVisitor, define visit methods for your new operations,
 14 cananian 1.1.2.1  * and then override <code>visit_unknown</code> to dispatch to your new
 15 cananian 1.1.2.1  * methods.
 16 cananian 1.1.2.1  * 
 17 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
 18 cananian 1.2      * @version $Id: OperVisitor.java,v 1.2 2002/02/25 21:05:12 cananian Exp $
 19 cananian 1.1.2.1  */
 20 cananian 1.1.2.1 
 21 cananian 1.1.2.1 public abstract class OperVisitor  {
 22 cananian 1.1.2.1     protected OperVisitor() { }
 23 cananian 1.1.2.1     
 24 cananian 1.1.2.1     public abstract void visit_default(OPER q);
 25 cananian 1.1.2.1     
 26 cananian 1.1.2.1     public void visit_acmpeq(OPER q) { visit_default(q); }
 27 cananian 1.1.2.1     public void visit_d2f(OPER q) { visit_default(q); }
 28 cananian 1.1.2.1     public void visit_d2i(OPER q) { visit_default(q); }
 29 cananian 1.1.2.1     public void visit_d2l(OPER q) { visit_default(q); }
 30 cananian 1.1.2.1     public void visit_dadd(OPER q) { visit_default(q); }
 31 cananian 1.1.2.1     public void visit_dcmpeq(OPER q) { visit_default(q); }
 32 cananian 1.1.2.1     public void visit_dcmpge(OPER q) { visit_default(q); }
 33 cananian 1.1.2.1     public void visit_dcmpgt(OPER q) { visit_default(q); }
 34 cananian 1.1.2.1     public void visit_ddiv(OPER q) { visit_default(q); }
 35 cananian 1.1.2.1     public void visit_dmul(OPER q) { visit_default(q); }
 36 cananian 1.1.2.1     public void visit_dneg(OPER q) { visit_default(q); }
 37 cananian 1.1.2.1     public void visit_drem(OPER q) { visit_default(q); }
 38 cananian 1.1.2.1     public void visit_f2d(OPER q) { visit_default(q); }
 39 cananian 1.1.2.1     public void visit_f2i(OPER q) { visit_default(q); }
 40 cananian 1.1.2.1     public void visit_f2l(OPER q) { visit_default(q); }
 41 cananian 1.1.2.1     public void visit_fadd(OPER q) { visit_default(q); }
 42 cananian 1.1.2.1     public void visit_fcmpeq(OPER q) { visit_default(q); }
 43 cananian 1.1.2.1     public void visit_fcmpge(OPER q) { visit_default(q); }
 44 cananian 1.1.2.1     public void visit_fcmpgt(OPER q) { visit_default(q); }
 45 cananian 1.1.2.1     public void visit_fdiv(OPER q) { visit_default(q); }
 46 cananian 1.1.2.1     public void visit_fmul(OPER q) { visit_default(q); }
 47 cananian 1.1.2.1     public void visit_fneg(OPER q) { visit_default(q); }
 48 cananian 1.1.2.1     public void visit_frem(OPER q) { visit_default(q); }
 49 cananian 1.1.2.1     public void visit_i2b(OPER q) { visit_default(q); }
 50 cananian 1.1.2.1     public void visit_i2c(OPER q) { visit_default(q); }
 51 cananian 1.1.2.1     public void visit_i2d(OPER q) { visit_default(q); }
 52 cananian 1.1.2.1     public void visit_i2f(OPER q) { visit_default(q); }
 53 cananian 1.1.2.1     public void visit_i2l(OPER q) { visit_default(q); }
 54 cananian 1.1.2.1     public void visit_i2s(OPER q) { visit_default(q); }
 55 cananian 1.1.2.1     public void visit_iadd(OPER q) { visit_default(q); }
 56 cananian 1.1.2.1     public void visit_iand(OPER q) { visit_default(q); }
 57 cananian 1.1.2.1     public void visit_icmpeq(OPER q) { visit_default(q); }
 58 cananian 1.1.2.1     public void visit_icmpgt(OPER q) { visit_default(q); }
 59 cananian 1.1.2.1     public void visit_idiv(OPER q) { visit_default(q); }
 60 cananian 1.1.2.1     public void visit_imul(OPER q) { visit_default(q); }
 61 cananian 1.1.2.1     public void visit_ineg(OPER q) { visit_default(q); }
 62 cananian 1.1.2.1     public void visit_ior(OPER q) { visit_default(q); }
 63 cananian 1.1.2.1     public void visit_irem(OPER q) { visit_default(q); }
 64 cananian 1.1.2.1     public void visit_ishl(OPER q) { visit_default(q); }
 65 cananian 1.1.2.1     public void visit_ishr(OPER q) { visit_default(q); }
 66 cananian 1.1.2.1     public void visit_iushr(OPER q) { visit_default(q); }
 67 cananian 1.1.2.1     public void visit_ixor(OPER q) { visit_default(q); }
 68 cananian 1.1.2.1     public void visit_l2d(OPER q) { visit_default(q); }
 69 cananian 1.1.2.1     public void visit_l2f(OPER q) { visit_default(q); }
 70 cananian 1.1.2.1     public void visit_l2i(OPER q) { visit_default(q); }
 71 cananian 1.1.2.1     public void visit_ladd(OPER q) { visit_default(q); }
 72 cananian 1.1.2.1     public void visit_land(OPER q) { visit_default(q); }
 73 cananian 1.1.2.1     public void visit_lcmpeq(OPER q) { visit_default(q); }
 74 cananian 1.1.2.1     public void visit_lcmpgt(OPER q) { visit_default(q); }
 75 cananian 1.1.2.1     public void visit_ldiv(OPER q) { visit_default(q); }
 76 cananian 1.1.2.1     public void visit_lmul(OPER q) { visit_default(q); }
 77 cananian 1.1.2.1     public void visit_lneg(OPER q) { visit_default(q); }
 78 cananian 1.1.2.1     public void visit_lor(OPER q) { visit_default(q); }
 79 cananian 1.1.2.1     public void visit_lrem(OPER q) { visit_default(q); }
 80 cananian 1.1.2.1     public void visit_lshl(OPER q) { visit_default(q); }
 81 cananian 1.1.2.1     public void visit_lshr(OPER q) { visit_default(q); }
 82 cananian 1.1.2.1     public void visit_lushr(OPER q) { visit_default(q); }
 83 cananian 1.1.2.1     public void visit_lxor(OPER q) { visit_default(q); }
 84 cananian 1.1.2.1     public void visit_unknown(OPER q) 
 85 cananian 1.1.2.1     { throw new RuntimeException("Unknown OPER opcode: "+q.opcode); }
 86 cananian 1.1.2.1 
 87 cananian 1.1.2.1     // package-scoped dispatch function.
 88 cananian 1.1.2.1     final void dispatch(OPER q) {
 89 cananian 1.1.2.1         switch (q.opcode) {
 90 cananian 1.1.2.1         case Qop.ACMPEQ:        visit_acmpeq(q); break;
 91 cananian 1.1.2.1         case Qop.D2F:   visit_d2f(q); break;
 92 cananian 1.1.2.1         case Qop.D2I:   visit_d2i(q); break;
 93 cananian 1.1.2.1         case Qop.D2L:   visit_d2l(q); break;
 94 cananian 1.1.2.1         case Qop.DADD:  visit_dadd(q); break;
 95 cananian 1.1.2.1         case Qop.DCMPEQ:        visit_dcmpeq(q); break;
 96 cananian 1.1.2.1         case Qop.DCMPGE:        visit_dcmpge(q); break;
 97 cananian 1.1.2.1         case Qop.DCMPGT:        visit_dcmpgt(q); break;
 98 cananian 1.1.2.1         case Qop.DDIV:  visit_ddiv(q); break;
 99 cananian 1.1.2.1         case Qop.DMUL:  visit_dmul(q); break;
100 cananian 1.1.2.1         case Qop.DNEG:  visit_dneg(q); break;
101 cananian 1.1.2.1         case Qop.DREM:  visit_drem(q); break;
102 cananian 1.1.2.1         case Qop.F2D:   visit_f2d(q); break;
103 cananian 1.1.2.1         case Qop.F2I:   visit_f2i(q); break;
104 cananian 1.1.2.1         case Qop.F2L:   visit_f2l(q); break;
105 cananian 1.1.2.1         case Qop.FADD:  visit_fadd(q); break;
106 cananian 1.1.2.1         case Qop.FCMPEQ:        visit_fcmpeq(q); break;
107 cananian 1.1.2.1         case Qop.FCMPGE:        visit_fcmpge(q); break;
108 cananian 1.1.2.1         case Qop.FCMPGT:        visit_fcmpgt(q); break;
109 cananian 1.1.2.1         case Qop.FDIV:  visit_fdiv(q); break;
110 cananian 1.1.2.1         case Qop.FMUL:  visit_fmul(q); break;
111 cananian 1.1.2.1         case Qop.FNEG:  visit_fneg(q); break;
112 cananian 1.1.2.1         case Qop.FREM:  visit_frem(q); break;
113 cananian 1.1.2.1         case Qop.I2B:   visit_i2b(q); break;
114 cananian 1.1.2.1         case Qop.I2C:   visit_i2c(q); break;
115 cananian 1.1.2.1         case Qop.I2D:   visit_i2d(q); break;
116 cananian 1.1.2.1         case Qop.I2F:   visit_i2f(q); break;
117 cananian 1.1.2.1         case Qop.I2L:   visit_i2l(q); break;
118 cananian 1.1.2.1         case Qop.I2S:   visit_i2s(q); break;
119 cananian 1.1.2.1         case Qop.IADD:  visit_iadd(q); break;
120 cananian 1.1.2.1         case Qop.IAND:  visit_iand(q); break;
121 cananian 1.1.2.1         case Qop.ICMPEQ:        visit_icmpeq(q); break;
122 cananian 1.1.2.1         case Qop.ICMPGT:        visit_icmpgt(q); break;
123 cananian 1.1.2.1         case Qop.IDIV:  visit_idiv(q); break;
124 cananian 1.1.2.1         case Qop.IMUL:  visit_imul(q); break;
125 cananian 1.1.2.1         case Qop.INEG:  visit_ineg(q); break;
126 cananian 1.1.2.1         case Qop.IOR:   visit_ior(q); break;
127 cananian 1.1.2.1         case Qop.IREM:  visit_irem(q); break;
128 cananian 1.1.2.1         case Qop.ISHL:  visit_ishl(q); break;
129 cananian 1.1.2.1         case Qop.ISHR:  visit_ishr(q); break;
130 cananian 1.1.2.1         case Qop.IUSHR: visit_iushr(q); break;
131 cananian 1.1.2.1         case Qop.IXOR:  visit_ixor(q); break;
132 cananian 1.1.2.1         case Qop.L2D:   visit_l2d(q); break;
133 cananian 1.1.2.1         case Qop.L2F:   visit_l2f(q); break;
134 cananian 1.1.2.1         case Qop.L2I:   visit_l2i(q); break;
135 cananian 1.1.2.1         case Qop.LADD:  visit_ladd(q); break;
136 cananian 1.1.2.1         case Qop.LAND:  visit_land(q); break;
137 cananian 1.1.2.1         case Qop.LCMPEQ:        visit_lcmpeq(q); break;
138 cananian 1.1.2.1         case Qop.LCMPGT:        visit_lcmpgt(q); break;
139 cananian 1.1.2.1         case Qop.LDIV:  visit_ldiv(q); break;
140 cananian 1.1.2.1         case Qop.LMUL:  visit_lmul(q); break;
141 cananian 1.1.2.1         case Qop.LNEG:  visit_lneg(q); break;
142 cananian 1.1.2.1         case Qop.LOR:   visit_lor(q); break;
143 cananian 1.1.2.1         case Qop.LREM:  visit_lrem(q); break;
144 cananian 1.1.2.1         case Qop.LSHL:  visit_lshl(q); break;
145 cananian 1.1.2.1         case Qop.LSHR:  visit_lshr(q); break;
146 cananian 1.1.2.1         case Qop.LUSHR: visit_lushr(q); break;
147 cananian 1.1.2.1         case Qop.LXOR:  visit_lxor(q); break;
148 cananian 1.1.2.1         default:        visit_unknown(q); break;
149 cananian 1.1.2.1         }
150 cananian 1.1.2.1     }
151 cananian 1.2     }