FileDocCategorySizeDatePackage
LDC.javaAPI DocJava SE 5 API6473Fri Aug 26 14:55:22 BST 2005com.sun.org.apache.bcel.internal.generic

LDC

public class LDC extends CPInstruction implements ExceptionThrower, TypedInstruction, PushInstruction
LDC - Push item from constant pool.
Stack: ... -> ..., item
version
$Id: LDC.java,v 1.1.1.1 2001/10/29 20:00:21 jvanzyl Exp $
author
M. Dahm

Fields Summary
Constructors Summary
LDC()
Empty constructor needed for the Class.newInstance() statement in Instruction.readInstruction(). Not to be used otherwise.

public LDC(int index)

    super(com.sun.org.apache.bcel.internal.Constants.LDC_W, index);
    setSize();
  
Methods Summary
public voidaccept(com.sun.org.apache.bcel.internal.generic.Visitor v)
Call corresponding visitor method(s). The order is: Call visitor methods of implemented interfaces first, then call methods according to the class hierarchy in descending order, i.e., the most specific visitXXX() call comes last.

param
v Visitor object

    v.visitStackProducer(this);
    v.visitPushInstruction(this);
    v.visitExceptionThrower(this);
    v.visitTypedInstruction(this);
    v.visitCPInstruction(this);
    v.visitLDC(this);
  
public voiddump(java.io.DataOutputStream out)
Dump instruction as byte code to stream out.

param
out Output stream

    out.writeByte(opcode);

    if(length == 2)
      out.writeByte(index);
    else // Applies for LDC_W
      out.writeShort(index);
  
public java.lang.Class[]getExceptions()

    return com.sun.org.apache.bcel.internal.ExceptionConstants.EXCS_STRING_RESOLUTION;
  
public com.sun.org.apache.bcel.internal.generic.TypegetType(com.sun.org.apache.bcel.internal.generic.ConstantPoolGen cpg)

    switch(cpg.getConstantPool().getConstant(index).getTag()) {
    case com.sun.org.apache.bcel.internal.Constants.CONSTANT_String:  return Type.STRING;
    case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Float:   return Type.FLOAT;
    case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Integer: return Type.INT;
    default: // Never reached
      throw new RuntimeException("Unknown or invalid constant type at " + index);
    }
  
public java.lang.ObjectgetValue(com.sun.org.apache.bcel.internal.generic.ConstantPoolGen cpg)

    com.sun.org.apache.bcel.internal.classfile.Constant c = cpg.getConstantPool().getConstant(index);

    switch(c.getTag()) {
      case com.sun.org.apache.bcel.internal.Constants.CONSTANT_String:
	int i = ((com.sun.org.apache.bcel.internal.classfile.ConstantString)c).getStringIndex();
	c = cpg.getConstantPool().getConstant(i);
	return ((com.sun.org.apache.bcel.internal.classfile.ConstantUtf8)c).getBytes();

    case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Float:
	return new Float(((com.sun.org.apache.bcel.internal.classfile.ConstantFloat)c).getBytes());

    case com.sun.org.apache.bcel.internal.Constants.CONSTANT_Integer:
	return new Integer(((com.sun.org.apache.bcel.internal.classfile.ConstantInteger)c).getBytes());

    default: // Never reached
      throw new RuntimeException("Unknown or invalid constant type at " + index);
      }
  
protected voidinitFromFile(com.sun.org.apache.bcel.internal.util.ByteSequence bytes, boolean wide)
Read needed data (e.g. index) from file.

    length = 2;
    index  = bytes.readUnsignedByte();
  
public final voidsetIndex(int index)
Set the index to constant pool and adjust size.

 
    super.setIndex(index);
    setSize();
  
protected final voidsetSize()

    if(index <= com.sun.org.apache.bcel.internal.Constants.MAX_BYTE) { // Fits in one byte?
      opcode = com.sun.org.apache.bcel.internal.Constants.LDC;
      length = 2;
    } else {
      opcode = com.sun.org.apache.bcel.internal.Constants.LDC_W;
      length = 3;
    }