Package com.ibm.wala.shrike.shrikeBT
Class ShiftInstruction
- java.lang.Object
-
- com.ibm.wala.shrike.shrikeBT.Instruction
-
- com.ibm.wala.shrike.shrikeBT.ShiftInstruction
-
- All Implemented Interfaces:
Constants,IInstruction,IShiftInstruction,java.lang.Cloneable
public final class ShiftInstruction extends Instruction implements IShiftInstruction
ShiftInstructions are distinguished from BinaryOpInstructions because most binary operations in the JVM require both parameters to be the same type, but shifts always take one int parameter.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.ibm.wala.shrike.shrikeBT.IInstruction
IInstruction.Visitor
-
Nested classes/interfaces inherited from interface com.ibm.wala.shrike.shrikeBT.IShiftInstruction
IShiftInstruction.Operator
-
-
Field Summary
-
Fields inherited from class com.ibm.wala.shrike.shrikeBT.Instruction
noInstructions
-
Fields inherited from interface com.ibm.wala.shrike.shrikeBT.Constants
ACC_ABSTRACT, ACC_ANNOTATION, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MODULE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_MethodRef, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_String, CONSTANT_Utf8, indexedTypes, indexedTypes_T, MAYBE, NO, OP_aaload, OP_aastore, OP_aconst_null, OP_aload, OP_aload_0, OP_aload_1, OP_aload_2, OP_aload_3, OP_anewarray, OP_areturn, OP_arraylength, OP_astore, OP_astore_0, OP_astore_1, OP_astore_2, OP_astore_3, OP_athrow, OP_baload, OP_bastore, OP_bipush, OP_caload, OP_castore, OP_checkcast, OP_d2f, OP_d2i, OP_d2l, OP_dadd, OP_daload, OP_dastore, OP_dcmpg, OP_dcmpl, OP_dconst_0, OP_dconst_1, OP_ddiv, OP_dload, OP_dload_0, OP_dload_1, OP_dload_2, OP_dload_3, OP_dmul, OP_dneg, OP_drem, OP_dreturn, OP_dstore, OP_dstore_0, OP_dstore_1, OP_dstore_2, OP_dstore_3, OP_dsub, OP_dup, OP_dup_x1, OP_dup_x2, OP_dup2, OP_dup2_x1, OP_dup2_x2, OP_f2d, OP_f2i, OP_f2l, OP_fadd, OP_faload, OP_fastore, OP_fcmpg, OP_fcmpl, OP_fconst_0, OP_fconst_1, OP_fconst_2, OP_fdiv, OP_fload, OP_fload_0, OP_fload_1, OP_fload_2, OP_fload_3, OP_fmul, OP_fneg, OP_frem, OP_freturn, OP_fstore, OP_fstore_0, OP_fstore_1, OP_fstore_2, OP_fstore_3, OP_fsub, OP_getfield, OP_getstatic, OP_goto, OP_goto_w, OP_i2b, OP_i2c, OP_i2d, OP_i2f, OP_i2l, OP_i2s, OP_iadd, OP_iaload, OP_iand, OP_iastore, OP_iconst_0, OP_iconst_1, OP_iconst_2, OP_iconst_3, OP_iconst_4, OP_iconst_5, OP_iconst_m1, OP_idiv, OP_if_acmpeq, OP_if_acmpne, OP_if_icmpeq, OP_if_icmpge, OP_if_icmpgt, OP_if_icmple, OP_if_icmplt, OP_if_icmpne, OP_ifeq, OP_ifge, OP_ifgt, OP_ifle, OP_iflt, OP_ifne, OP_ifnonnull, OP_ifnull, OP_iinc, OP_iload, OP_iload_0, OP_iload_1, OP_iload_2, OP_iload_3, OP_imul, OP_ineg, OP_instanceof, OP_invokedynamic, OP_invokeinterface, OP_invokespecial, OP_invokestatic, OP_invokevirtual, OP_ior, OP_irem, OP_ireturn, OP_ishl, OP_ishr, OP_istore, OP_istore_0, OP_istore_1, OP_istore_2, OP_istore_3, OP_isub, OP_iushr, OP_ixor, OP_jsr, OP_jsr_w, OP_l2d, OP_l2f, OP_l2i, OP_ladd, OP_laload, OP_land, OP_lastore, OP_lcmp, OP_lconst_0, OP_lconst_1, OP_ldc, OP_ldc_w, OP_ldc2_w, OP_ldiv, OP_lload, OP_lload_0, OP_lload_1, OP_lload_2, OP_lload_3, OP_lmul, OP_lneg, OP_lookupswitch, OP_lor, OP_lrem, OP_lreturn, OP_lshl, OP_lshr, OP_lstore, OP_lstore_0, OP_lstore_1, OP_lstore_2, OP_lstore_3, OP_lsub, OP_lushr, OP_lxor, OP_monitorenter, OP_monitorexit, OP_multianewarray, OP_new, OP_newarray, OP_nop, OP_pop, OP_pop2, OP_putfield, OP_putstatic, OP_ret, OP_return, OP_saload, OP_sastore, OP_sipush, OP_swap, OP_tableswitch, OP_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TYPE_boolean, TYPE_boolean_index, TYPE_byte, TYPE_byte_index, TYPE_char, TYPE_char_index, TYPE_Class, TYPE_double, TYPE_double_index, TYPE_Error, TYPE_Exception, TYPE_float, TYPE_float_index, TYPE_int, TYPE_int_index, TYPE_long, TYPE_long_index, TYPE_MethodHandle, TYPE_MethodType, TYPE_null, TYPE_Object, TYPE_Object_index, TYPE_RuntimeException, TYPE_short, TYPE_short_index, TYPE_String, TYPE_Throwable, TYPE_unknown, TYPE_void, YES
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanequals(java.lang.Object o)IShiftInstruction.OperatorgetOperator()intgetPoppedCount()java.lang.StringgetPushedType(java.lang.String[] types)Computes the type of data pushed onto the stack, or null if none is pushed.bytegetPushedWordSize()java.lang.StringgetType()inthashCode()booleanisPEI()PEI == "Potentially excepting instruction"booleanisUnsigned()static ShiftInstructionmake(java.lang.String type, IShiftInstruction.Operator operator)java.lang.StringtoString()Subclasses must implement toString.voidvisit(IInstruction.Visitor v)Apply a Visitor to this instruction.-
Methods inherited from class com.ibm.wala.shrike.shrikeBT.Instruction
clone, getBranchTargets, getOpcode, isFallThrough, redirectTargets
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.ibm.wala.shrike.shrikeBT.IInstruction
getBranchTargets, isFallThrough, redirectTargets
-
-
-
-
Method Detail
-
make
public static ShiftInstruction make(java.lang.String type, IShiftInstruction.Operator operator) throws java.lang.IllegalArgumentException
- Throws:
java.lang.IllegalArgumentException
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equalsin classjava.lang.Object
-
getOperator
public IShiftInstruction.Operator getOperator()
- Specified by:
getOperatorin interfaceIShiftInstruction
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
getPoppedCount
public int getPoppedCount()
- Specified by:
getPoppedCountin interfaceIInstruction- Overrides:
getPoppedCountin classInstruction- Returns:
- the number of values this instruction pops off the working stack
-
getPushedType
public java.lang.String getPushedType(java.lang.String[] types)
Description copied from class:InstructionComputes the type of data pushed onto the stack, or null if none is pushed.- Specified by:
getPushedTypein interfaceIInstruction- Overrides:
getPushedTypein classInstruction- Parameters:
types- the types of the data popped off the stack by this instruction; if poppedTypes is null, then we don't know the incoming stack types and the result of this method may be less accurate
-
getPushedWordSize
public byte getPushedWordSize()
- Specified by:
getPushedWordSizein interfaceIInstruction- Overrides:
getPushedWordSizein classInstruction- Returns:
- the JVM word size of the value this instruction pushes onto the stack, or 0 if this instruction doesn't push anything onto the stack.
-
getType
public java.lang.String getType()
- Specified by:
getTypein interfaceIShiftInstruction
-
visit
public void visit(IInstruction.Visitor v) throws java.lang.NullPointerException
Description copied from class:InstructionApply a Visitor to this instruction. We invoke the appropriate Visitor method according to the type of this instruction.- Specified by:
visitin interfaceIInstruction- Specified by:
visitin classInstruction- Throws:
java.lang.NullPointerException
-
toString
public java.lang.String toString()
Description copied from class:InstructionSubclasses must implement toString.- Specified by:
toStringin interfaceIInstruction- Specified by:
toStringin classInstruction
-
isPEI
public boolean isPEI()
Description copied from interface:IInstructionPEI == "Potentially excepting instruction"- Specified by:
isPEIin interfaceIInstruction- Returns:
- true iff this instruction might throw an exception
-
isUnsigned
public boolean isUnsigned()
- Specified by:
isUnsignedin interfaceIShiftInstruction
-
-