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      }