JML

org.multijava.util.classfile
Class PushLiteralInstruction

java.lang.Object
  extended byorg.multijava.util.classfile.AbstractInstructionAccessor
      extended byorg.multijava.util.classfile.Instruction
          extended byorg.multijava.util.classfile.PushLiteralInstruction
All Implemented Interfaces:
Constants, InstructionAccessor

public class PushLiteralInstruction
extends Instruction

This class encapsulates the instructions pushing a literal on the stack: bipush, sipush, ldc, ldc_w, ldc2_w, dconst_<d>, fconst_<f>, iconst_<i>, lconst_<l>


Nested Class Summary
(package private)  class PushLiteralInstruction.ByteOperand
           
(package private)  class PushLiteralInstruction.ConstantOperand
           
(package private) static interface PushLiteralInstruction.Operand
           
(package private)  class PushLiteralInstruction.ShortOperand
           
 
Field Summary
private  PushLiteralInstruction.Operand operand
           
private  Object value
           
 
Fields inherited from class org.multijava.util.classfile.Instruction
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc2_w, opc_ldc_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
PushLiteralInstruction(double value)
          Constructs an instruction that pushes a double literal on the stack.
PushLiteralInstruction(float value)
          Constructs an instruction that pushes a float literal on the stack.
PushLiteralInstruction(int value)
          Constructs an instruction that pushes a int literal on the stack.
PushLiteralInstruction(String value)
          Constructs an instruction that pushes a string literal on the stack.
PushLiteralInstruction(long value)
          Constructs an instruction that pushes a long literal on the stack.
PushLiteralInstruction(PooledConstant cst, boolean wide)
          Constructs an instruction that pushes a string literal on the stack from a class file stream.
 
Method Summary
 boolean canComplete()
          Returns true iff control flow can reach the next instruction in textual order.
 Object getLiteral()
          Returns the value of this literal
 int getPushedOnStack()
          Returns the size of data pushed on the stack by this instruction
 byte getReturnType()
          Returns the type pushed on the stack
(package private)  int getSize()
          Returns the number of bytes used by the the instruction in the code array.
 int getStack()
          Return the amount of stack (positive or negative) used by this instruction
 boolean isLiteral()
          Return true if this instruction is a literal
(package private)  void resolveConstants(ConstantPool cp)
          Insert or check location of constant value on constant pool
(package private)  void write(ConstantPool cp, DataOutput out)
          Write this instruction into a file
 
Methods inherited from class org.multijava.util.classfile.Instruction
check, computeEndAddress, dump, getAddress, getLocalVar, getOpcode, getPoppedFromStack, setAddress, setOpcode
 
Methods inherited from class org.multijava.util.classfile.AbstractInstructionAccessor
transform
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

operand

private PushLiteralInstruction.Operand operand

value

private Object value
Constructor Detail

PushLiteralInstruction

public PushLiteralInstruction(double value)
Constructs an instruction that pushes a double literal on the stack.

Parameters:
value - a double literal

PushLiteralInstruction

public PushLiteralInstruction(float value)
Constructs an instruction that pushes a float literal on the stack.

Parameters:
value - a float literal

PushLiteralInstruction

public PushLiteralInstruction(int value)
Constructs an instruction that pushes a int literal on the stack.

Parameters:
value - a int literal

PushLiteralInstruction

public PushLiteralInstruction(long value)
Constructs an instruction that pushes a long literal on the stack.

Parameters:
value - a long literal

PushLiteralInstruction

public PushLiteralInstruction(String value)
Constructs an instruction that pushes a string literal on the stack.

Parameters:
value - a string literal

PushLiteralInstruction

public PushLiteralInstruction(PooledConstant cst,
                              boolean wide)
Constructs an instruction that pushes a string literal on the stack from a class file stream.

Parameters:
cst - a pooled constant
wide - does this constant use 2 slots in the pool ?
Method Detail

canComplete

public boolean canComplete()
Returns true iff control flow can reach the next instruction in textual order.


isLiteral

public boolean isLiteral()
Return true if this instruction is a literal

Overrides:
isLiteral in class Instruction

getSize

int getSize()
Returns the number of bytes used by the the instruction in the code array.


getLiteral

public Object getLiteral()
Returns the value of this literal


getPushedOnStack

public int getPushedOnStack()
Returns the size of data pushed on the stack by this instruction


getReturnType

public byte getReturnType()
Returns the type pushed on the stack


getStack

public int getStack()
Return the amount of stack (positive or negative) used by this instruction


resolveConstants

void resolveConstants(ConstantPool cp)
Insert or check location of constant value on constant pool

Parameters:
cp - the constant pool for this class

write

void write(ConstantPool cp,
           DataOutput out)
     throws IOException
Write this instruction into a file

Parameters:
cp - the constant pool that contain all data
out - the file where to write this object info
Throws:
IOException - an io problem has occured

JML

JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.