1 cananian 1.1.2.1 // OPER.java, created Wed Jan 13 21:14:57 1999 by cananian 2 cananian 1.1.2.8 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.8 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.IR.Tree; 5 cananian 1.1.2.1 6 cananian 1.1.2.4 import harpoon.ClassFile.HCodeElement; 7 cananian 1.1.2.3 import harpoon.Util.Util; 8 cananian 1.1.2.3 9 cananian 1.1.2.1 /** 10 cananian 1.1.2.1 * <code>OPER</code> objects are expressions which stand for the result 11 cananian 1.1.2.1 * of applying some operator to subexpressions. 12 cananian 1.1.2.1 * 13 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu>, based on 14 cananian 1.1.2.1 * <i>Modern Compiler Implementation in Java</i> by Andrew Appel. 15 cananian 1.4 * @version $Id: OPER.java,v 1.4 2002/04/10 03:05:45 cananian Exp $ 16 cananian 1.1.2.1 */ 17 cananian 1.1.2.7 public abstract class OPER extends Exp { 18 cananian 1.1.2.3 /** An enumerated type encoding the operator. 19 cananian 1.1.2.3 * @see Bop 20 cananian 1.1.2.3 * @see Uop 21 cananian 1.1.2.3 */ 22 cananian 1.1.2.1 public final int op; 23 cananian 1.1.2.3 /** Type of the operands (not necessarily the result type). */ 24 cananian 1.1.2.5 public final int optype; 25 cananian 1.1.2.1 26 cananian 1.1.2.4 public OPER(TreeFactory tf, HCodeElement source, 27 cananian 1.1.2.11 int optype, int op, int arity) { 28 cananian 1.1.2.11 super(tf, source, arity); 29 cananian 1.3.2.1 assert Type.isValid(optype); 30 cananian 1.1.2.3 // subclass must verify validity of op. 31 cananian 1.1.2.5 this.op = op; this.optype = optype; 32 cananian 1.1.2.3 } 33 duncan 1.1.2.2 /** Accept a visitor */ 34 cananian 1.1.2.9 public void accept(TreeVisitor v) { v.visit(this); } 35 duncan 1.1.2.10 36 cananian 1.1.2.3 // <code>Typed</code> interface. 37 cananian 1.1.2.5 38 cananian 1.1.2.3 /** Return result type. */ 39 cananian 1.1.2.5 public abstract int type(); 40 cananian 1.1.2.5 /** Return type of operands (not necessarily the result type). */ 41 cananian 1.1.2.5 public int operandType() { return optype; } 42 cananian 1.2 }