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 }