1 cananian 1.2.2.4 // OpClass.java, created Sun Sep 13 22:49:22 1998 by cananian
 2 cananian 1.2     // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.2     // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1     package harpoon.IR.Bytecode;
 5 cananian 1.1     
 6 cananian 1.2.2.3 import harpoon.ClassFile.HClass;
 7 cananian 1.2.2.2 import harpoon.IR.RawClass.Constant;
 8 cananian 1.2.2.2 import harpoon.IR.RawClass.ConstantClass;
 9 cananian 1.1     
10 cananian 1.1     /**
11 cananian 1.1      * <code>OpClass</code> represents a class reference operand of a
12 cananian 1.1      * java bytecode instruction.  It is generated from a
13 cananian 1.1      * <code>CONSTANT_Class</code> constant pool entry.
14 cananian 1.1      *
15 cananian 1.1      * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
16 cananian 1.3      * @version $Id: OpClass.java,v 1.3 2002/02/25 21:04:17 cananian Exp $
17 cananian 1.2.2.2  * @see harpoon.IR.RawClass.ConstantClass
18 cananian 1.1      */
19 cananian 1.2.2.1 public final class OpClass extends Operand {
20 cananian 1.2.2.1   final HClass hclass;
21 cananian 1.1       /** Creates an <code>OpClass</code> from the <code>CONSTANT_CLASS</code>
22 cananian 1.1        *  at the given index in the constant pool.
23 cananian 1.1        */
24 cananian 1.1       public OpClass(Code parent, int constant_pool_index) {
25 cananian 1.1         Constant c = parent.getConstant(constant_pool_index);
26 cananian 1.1         if (!(c instanceof ConstantClass))
27 cananian 1.1           throw new Error("OpClass not given CONSTANT_Class");
28 cananian 1.1         String classname = ((ConstantClass) c).name();
29 cananian 1.1         if (classname.charAt(0) != '[') // not a real descriptor yet.
30 cananian 1.1             classname = "L" + classname + ";";
31 cananian 1.2.2.5     hclass = parent.linker.forDescriptor(classname);
32 cananian 1.1       }
33 cananian 1.1       /** Return the class referenced. */
34 cananian 1.1       public HClass value() { return hclass; }
35 cananian 1.1       /** Return a human-readable string given the value of this object. */
36 cananian 1.1       public String toString() { return hclass.toString(); }
37 cananian 1.1     }