public class InstructionStack extends InstructionAdapter
This class is an InstructionVisitor that updates the instruction stack representation appropriately. When there is a merge in control flow, two InstructionStacks are merged using the merge method.
This class is also used to determine whether the object at a given stack depth is "preexistent". An object preexists if we can guarantee that it was created outside of the method in which it is used. While it is possible to determine which fields are preexistent (see "Inlining of Virtual Methods" by Detlefs and Ageson in ECOOP99), we only keep track of local variables that preexist.
We determine which local variables preexist as follows. Initially, only the local variables for method parameters preexist. When a store is encoutered, we determine if the set of instructions on top of the stack consist of loads preexistent variables. If so, then the variable being stored into is preexistent. However, objects that are the result of an allocation (constructor call) in the method are preexist. Thus, we maintain the preexist information as a set. If the set is null, then the object does not preexist. If the set is empty, then it preexists and came from at least one argument. If the set is non-empty, then it contains the type(s) of the constructor(s) from which it originated. Pretty neat, huh?
| Constructor and Description |
|---|
InstructionStack(MethodEditor method)
Constructor.
|
public InstructionStack(MethodEditor method)
public void handle(Label label)
public void handle(Instruction inst)
public int height()
public java.util.Set atDepth(int n)
public java.util.HashSet preexistsAtDepth(int n)
public void visit_nop(Instruction inst)
visit_nop in interface InstructionVisitorvisit_nop in class InstructionAdapterpublic void visit_ldc(Instruction inst)
visit_ldc in interface InstructionVisitorvisit_ldc in class InstructionAdapterpublic void visit_iload(Instruction inst)
visit_iload in interface InstructionVisitorvisit_iload in class InstructionAdapterpublic void visit_lload(Instruction inst)
visit_lload in interface InstructionVisitorvisit_lload in class InstructionAdapterpublic void visit_fload(Instruction inst)
visit_fload in interface InstructionVisitorvisit_fload in class InstructionAdapterpublic void visit_dload(Instruction inst)
visit_dload in interface InstructionVisitorvisit_dload in class InstructionAdapterpublic void visit_aload(Instruction inst)
visit_aload in interface InstructionVisitorvisit_aload in class InstructionAdapterpublic void visit_iaload(Instruction inst)
visit_iaload in interface InstructionVisitorvisit_iaload in class InstructionAdapterpublic void visit_laload(Instruction inst)
visit_laload in interface InstructionVisitorvisit_laload in class InstructionAdapterpublic void visit_faload(Instruction inst)
visit_faload in interface InstructionVisitorvisit_faload in class InstructionAdapterpublic void visit_daload(Instruction inst)
visit_daload in interface InstructionVisitorvisit_daload in class InstructionAdapterpublic void visit_aaload(Instruction inst)
visit_aaload in interface InstructionVisitorvisit_aaload in class InstructionAdapterpublic void visit_baload(Instruction inst)
visit_baload in interface InstructionVisitorvisit_baload in class InstructionAdapterpublic void visit_caload(Instruction inst)
visit_caload in interface InstructionVisitorvisit_caload in class InstructionAdapterpublic void visit_saload(Instruction inst)
visit_saload in interface InstructionVisitorvisit_saload in class InstructionAdapterpublic void visit_istore(Instruction inst)
visit_istore in interface InstructionVisitorvisit_istore in class InstructionAdapterpublic void visit_lstore(Instruction inst)
visit_lstore in interface InstructionVisitorvisit_lstore in class InstructionAdapterpublic void visit_fstore(Instruction inst)
visit_fstore in interface InstructionVisitorvisit_fstore in class InstructionAdapterpublic void visit_dstore(Instruction inst)
visit_dstore in interface InstructionVisitorvisit_dstore in class InstructionAdapterpublic void visit_astore(Instruction inst)
visit_astore in interface InstructionVisitorvisit_astore in class InstructionAdapterpublic void visit_iastore(Instruction inst)
visit_iastore in interface InstructionVisitorvisit_iastore in class InstructionAdapterpublic void visit_lastore(Instruction inst)
visit_lastore in interface InstructionVisitorvisit_lastore in class InstructionAdapterpublic void visit_fastore(Instruction inst)
visit_fastore in interface InstructionVisitorvisit_fastore in class InstructionAdapterpublic void visit_dastore(Instruction inst)
visit_dastore in interface InstructionVisitorvisit_dastore in class InstructionAdapterpublic void visit_aastore(Instruction inst)
visit_aastore in interface InstructionVisitorvisit_aastore in class InstructionAdapterpublic void visit_bastore(Instruction inst)
visit_bastore in interface InstructionVisitorvisit_bastore in class InstructionAdapterpublic void visit_castore(Instruction inst)
visit_castore in interface InstructionVisitorvisit_castore in class InstructionAdapterpublic void visit_sastore(Instruction inst)
visit_sastore in interface InstructionVisitorvisit_sastore in class InstructionAdapterpublic void visit_pop(Instruction inst)
visit_pop in interface InstructionVisitorvisit_pop in class InstructionAdapterpublic void visit_pop2(Instruction inst)
visit_pop2 in interface InstructionVisitorvisit_pop2 in class InstructionAdapterpublic void visit_dup(Instruction inst)
visit_dup in interface InstructionVisitorvisit_dup in class InstructionAdapterpublic void visit_dup_x1(Instruction inst)
visit_dup_x1 in interface InstructionVisitorvisit_dup_x1 in class InstructionAdapterpublic void visit_dup_x2(Instruction inst)
visit_dup_x2 in interface InstructionVisitorvisit_dup_x2 in class InstructionAdapterpublic void visit_dup2(Instruction inst)
visit_dup2 in interface InstructionVisitorvisit_dup2 in class InstructionAdapterpublic void visit_dup2_x1(Instruction inst)
visit_dup2_x1 in interface InstructionVisitorvisit_dup2_x1 in class InstructionAdapterpublic void visit_dup2_x2(Instruction inst)
visit_dup2_x2 in interface InstructionVisitorvisit_dup2_x2 in class InstructionAdapterpublic void visit_swap(Instruction inst)
visit_swap in interface InstructionVisitorvisit_swap in class InstructionAdapterpublic void visit_iadd(Instruction inst)
visit_iadd in interface InstructionVisitorvisit_iadd in class InstructionAdapterpublic void visit_ladd(Instruction inst)
visit_ladd in interface InstructionVisitorvisit_ladd in class InstructionAdapterpublic void visit_fadd(Instruction inst)
visit_fadd in interface InstructionVisitorvisit_fadd in class InstructionAdapterpublic void visit_dadd(Instruction inst)
visit_dadd in interface InstructionVisitorvisit_dadd in class InstructionAdapterpublic void visit_isub(Instruction inst)
visit_isub in interface InstructionVisitorvisit_isub in class InstructionAdapterpublic void visit_lsub(Instruction inst)
visit_lsub in interface InstructionVisitorvisit_lsub in class InstructionAdapterpublic void visit_fsub(Instruction inst)
visit_fsub in interface InstructionVisitorvisit_fsub in class InstructionAdapterpublic void visit_dsub(Instruction inst)
visit_dsub in interface InstructionVisitorvisit_dsub in class InstructionAdapterpublic void visit_imul(Instruction inst)
visit_imul in interface InstructionVisitorvisit_imul in class InstructionAdapterpublic void visit_lmul(Instruction inst)
visit_lmul in interface InstructionVisitorvisit_lmul in class InstructionAdapterpublic void visit_fmul(Instruction inst)
visit_fmul in interface InstructionVisitorvisit_fmul in class InstructionAdapterpublic void visit_dmul(Instruction inst)
visit_dmul in interface InstructionVisitorvisit_dmul in class InstructionAdapterpublic void visit_idiv(Instruction inst)
visit_idiv in interface InstructionVisitorvisit_idiv in class InstructionAdapterpublic void visit_ldiv(Instruction inst)
visit_ldiv in interface InstructionVisitorvisit_ldiv in class InstructionAdapterpublic void visit_fdiv(Instruction inst)
visit_fdiv in interface InstructionVisitorvisit_fdiv in class InstructionAdapterpublic void visit_ddiv(Instruction inst)
visit_ddiv in interface InstructionVisitorvisit_ddiv in class InstructionAdapterpublic void visit_irem(Instruction inst)
visit_irem in interface InstructionVisitorvisit_irem in class InstructionAdapterpublic void visit_lrem(Instruction inst)
visit_lrem in interface InstructionVisitorvisit_lrem in class InstructionAdapterpublic void visit_frem(Instruction inst)
visit_frem in interface InstructionVisitorvisit_frem in class InstructionAdapterpublic void visit_drem(Instruction inst)
visit_drem in interface InstructionVisitorvisit_drem in class InstructionAdapterpublic void visit_ineg(Instruction inst)
visit_ineg in interface InstructionVisitorvisit_ineg in class InstructionAdapterpublic void visit_lneg(Instruction inst)
visit_lneg in interface InstructionVisitorvisit_lneg in class InstructionAdapterpublic void visit_fneg(Instruction inst)
visit_fneg in interface InstructionVisitorvisit_fneg in class InstructionAdapterpublic void visit_dneg(Instruction inst)
visit_dneg in interface InstructionVisitorvisit_dneg in class InstructionAdapterpublic void visit_ishl(Instruction inst)
visit_ishl in interface InstructionVisitorvisit_ishl in class InstructionAdapterpublic void visit_lshl(Instruction inst)
visit_lshl in interface InstructionVisitorvisit_lshl in class InstructionAdapterpublic void visit_ishr(Instruction inst)
visit_ishr in interface InstructionVisitorvisit_ishr in class InstructionAdapterpublic void visit_lshr(Instruction inst)
visit_lshr in interface InstructionVisitorvisit_lshr in class InstructionAdapterpublic void visit_iushr(Instruction inst)
visit_iushr in interface InstructionVisitorvisit_iushr in class InstructionAdapterpublic void visit_lushr(Instruction inst)
visit_lushr in interface InstructionVisitorvisit_lushr in class InstructionAdapterpublic void visit_iand(Instruction inst)
visit_iand in interface InstructionVisitorvisit_iand in class InstructionAdapterpublic void visit_land(Instruction inst)
visit_land in interface InstructionVisitorvisit_land in class InstructionAdapterpublic void visit_ior(Instruction inst)
visit_ior in interface InstructionVisitorvisit_ior in class InstructionAdapterpublic void visit_lor(Instruction inst)
visit_lor in interface InstructionVisitorvisit_lor in class InstructionAdapterpublic void visit_ixor(Instruction inst)
visit_ixor in interface InstructionVisitorvisit_ixor in class InstructionAdapterpublic void visit_lxor(Instruction inst)
visit_lxor in interface InstructionVisitorvisit_lxor in class InstructionAdapterpublic void visit_iinc(Instruction inst)
visit_iinc in interface InstructionVisitorvisit_iinc in class InstructionAdapterpublic void visit_i2l(Instruction inst)
visit_i2l in interface InstructionVisitorvisit_i2l in class InstructionAdapterpublic void visit_i2f(Instruction inst)
visit_i2f in interface InstructionVisitorvisit_i2f in class InstructionAdapterpublic void visit_i2d(Instruction inst)
visit_i2d in interface InstructionVisitorvisit_i2d in class InstructionAdapterpublic void visit_l2i(Instruction inst)
visit_l2i in interface InstructionVisitorvisit_l2i in class InstructionAdapterpublic void visit_l2f(Instruction inst)
visit_l2f in interface InstructionVisitorvisit_l2f in class InstructionAdapterpublic void visit_l2d(Instruction inst)
visit_l2d in interface InstructionVisitorvisit_l2d in class InstructionAdapterpublic void visit_f2i(Instruction inst)
visit_f2i in interface InstructionVisitorvisit_f2i in class InstructionAdapterpublic void visit_f2l(Instruction inst)
visit_f2l in interface InstructionVisitorvisit_f2l in class InstructionAdapterpublic void visit_f2d(Instruction inst)
visit_f2d in interface InstructionVisitorvisit_f2d in class InstructionAdapterpublic void visit_d2i(Instruction inst)
visit_d2i in interface InstructionVisitorvisit_d2i in class InstructionAdapterpublic void visit_d2l(Instruction inst)
visit_d2l in interface InstructionVisitorvisit_d2l in class InstructionAdapterpublic void visit_d2f(Instruction inst)
visit_d2f in interface InstructionVisitorvisit_d2f in class InstructionAdapterpublic void visit_i2b(Instruction inst)
visit_i2b in interface InstructionVisitorvisit_i2b in class InstructionAdapterpublic void visit_i2c(Instruction inst)
visit_i2c in interface InstructionVisitorvisit_i2c in class InstructionAdapterpublic void visit_i2s(Instruction inst)
visit_i2s in interface InstructionVisitorvisit_i2s in class InstructionAdapterpublic void visit_lcmp(Instruction inst)
visit_lcmp in interface InstructionVisitorvisit_lcmp in class InstructionAdapterpublic void visit_fcmpl(Instruction inst)
visit_fcmpl in interface InstructionVisitorvisit_fcmpl in class InstructionAdapterpublic void visit_fcmpg(Instruction inst)
visit_fcmpg in interface InstructionVisitorvisit_fcmpg in class InstructionAdapterpublic void visit_dcmpl(Instruction inst)
visit_dcmpl in interface InstructionVisitorvisit_dcmpl in class InstructionAdapterpublic void visit_dcmpg(Instruction inst)
visit_dcmpg in interface InstructionVisitorvisit_dcmpg in class InstructionAdapterpublic void visit_ifeq(Instruction inst)
visit_ifeq in interface InstructionVisitorvisit_ifeq in class InstructionAdapterpublic void visit_ifne(Instruction inst)
visit_ifne in interface InstructionVisitorvisit_ifne in class InstructionAdapterpublic void visit_iflt(Instruction inst)
visit_iflt in interface InstructionVisitorvisit_iflt in class InstructionAdapterpublic void visit_ifge(Instruction inst)
visit_ifge in interface InstructionVisitorvisit_ifge in class InstructionAdapterpublic void visit_ifgt(Instruction inst)
visit_ifgt in interface InstructionVisitorvisit_ifgt in class InstructionAdapterpublic void visit_ifle(Instruction inst)
visit_ifle in interface InstructionVisitorvisit_ifle in class InstructionAdapterpublic void visit_if_icmpeq(Instruction inst)
visit_if_icmpeq in interface InstructionVisitorvisit_if_icmpeq in class InstructionAdapterpublic void visit_if_icmpne(Instruction inst)
visit_if_icmpne in interface InstructionVisitorvisit_if_icmpne in class InstructionAdapterpublic void visit_if_icmplt(Instruction inst)
visit_if_icmplt in interface InstructionVisitorvisit_if_icmplt in class InstructionAdapterpublic void visit_if_icmpge(Instruction inst)
visit_if_icmpge in interface InstructionVisitorvisit_if_icmpge in class InstructionAdapterpublic void visit_if_icmpgt(Instruction inst)
visit_if_icmpgt in interface InstructionVisitorvisit_if_icmpgt in class InstructionAdapterpublic void visit_if_icmple(Instruction inst)
visit_if_icmple in interface InstructionVisitorvisit_if_icmple in class InstructionAdapterpublic void visit_if_acmpeq(Instruction inst)
visit_if_acmpeq in interface InstructionVisitorvisit_if_acmpeq in class InstructionAdapterpublic void visit_if_acmpne(Instruction inst)
visit_if_acmpne in interface InstructionVisitorvisit_if_acmpne in class InstructionAdapterpublic void visit_goto(Instruction inst)
visit_goto in interface InstructionVisitorvisit_goto in class InstructionAdapterpublic void visit_jsr(Instruction inst)
visit_jsr in interface InstructionVisitorvisit_jsr in class InstructionAdapterpublic void visit_ret(Instruction inst)
visit_ret in interface InstructionVisitorvisit_ret in class InstructionAdapterpublic void visit_switch(Instruction inst)
visit_switch in interface InstructionVisitorvisit_switch in class InstructionAdapterpublic void visit_ireturn(Instruction inst)
visit_ireturn in interface InstructionVisitorvisit_ireturn in class InstructionAdapterpublic void visit_lreturn(Instruction inst)
visit_lreturn in interface InstructionVisitorvisit_lreturn in class InstructionAdapterpublic void visit_freturn(Instruction inst)
visit_freturn in interface InstructionVisitorvisit_freturn in class InstructionAdapterpublic void visit_dreturn(Instruction inst)
visit_dreturn in interface InstructionVisitorvisit_dreturn in class InstructionAdapterpublic void visit_areturn(Instruction inst)
visit_areturn in interface InstructionVisitorvisit_areturn in class InstructionAdapterpublic void visit_return(Instruction inst)
visit_return in interface InstructionVisitorvisit_return in class InstructionAdapterpublic void visit_getstatic(Instruction inst)
visit_getstatic in interface InstructionVisitorvisit_getstatic in class InstructionAdapterpublic void visit_putstatic(Instruction inst)
visit_putstatic in interface InstructionVisitorvisit_putstatic in class InstructionAdapterpublic void visit_putstatic_nowb(Instruction inst)
visit_putstatic_nowb in interface InstructionVisitorvisit_putstatic_nowb in class InstructionAdapterpublic void visit_getfield(Instruction inst)
visit_getfield in interface InstructionVisitorvisit_getfield in class InstructionAdapterpublic void visit_putfield(Instruction inst)
visit_putfield in interface InstructionVisitorvisit_putfield in class InstructionAdapterpublic void visit_putfield_nowb(Instruction inst)
visit_putfield_nowb in interface InstructionVisitorvisit_putfield_nowb in class InstructionAdapterpublic void visit_invokevirtual(Instruction inst)
visit_invokevirtual in interface InstructionVisitorvisit_invokevirtual in class InstructionAdapterpublic void visit_invokespecial(Instruction inst)
visit_invokespecial in interface InstructionVisitorvisit_invokespecial in class InstructionAdapterpublic void visit_invokestatic(Instruction inst)
visit_invokestatic in interface InstructionVisitorvisit_invokestatic in class InstructionAdapterpublic void visit_invokeinterface(Instruction inst)
visit_invokeinterface in interface InstructionVisitorvisit_invokeinterface in class InstructionAdapterpublic void visit_new(Instruction inst)
visit_new in interface InstructionVisitorvisit_new in class InstructionAdapterpublic void visit_newarray(Instruction inst)
visit_newarray in interface InstructionVisitorvisit_newarray in class InstructionAdapterpublic void visit_arraylength(Instruction inst)
visit_arraylength in interface InstructionVisitorvisit_arraylength in class InstructionAdapterpublic void visit_athrow(Instruction inst)
visit_athrow in interface InstructionVisitorvisit_athrow in class InstructionAdapterpublic void visit_checkcast(Instruction inst)
visit_checkcast in interface InstructionVisitorvisit_checkcast in class InstructionAdapterpublic void visit_instanceof(Instruction inst)
visit_instanceof in interface InstructionVisitorvisit_instanceof in class InstructionAdapterpublic void visit_monitorenter(Instruction inst)
visit_monitorenter in interface InstructionVisitorvisit_monitorenter in class InstructionAdapterpublic void visit_monitorexit(Instruction inst)
visit_monitorexit in interface InstructionVisitorvisit_monitorexit in class InstructionAdapterpublic void visit_multianewarray(Instruction inst)
visit_multianewarray in interface InstructionVisitorvisit_multianewarray in class InstructionAdapterpublic void visit_ifnull(Instruction inst)
visit_ifnull in interface InstructionVisitorvisit_ifnull in class InstructionAdapterpublic void visit_ifnonnull(Instruction inst)
visit_ifnonnull in interface InstructionVisitorvisit_ifnonnull in class InstructionAdapterpublic void visit_rc(Instruction inst)
visit_rc in interface InstructionVisitorvisit_rc in class InstructionAdapterpublic void visit_aupdate(Instruction inst)
visit_aupdate in interface InstructionVisitorvisit_aupdate in class InstructionAdapterpublic void visit_supdate(Instruction inst)
visit_supdate in interface InstructionVisitorvisit_supdate in class InstructionAdapterpublic void visit_aswizzle(Instruction inst)
visit_aswizzle in interface InstructionVisitorvisit_aswizzle in class InstructionAdapterpublic void visit_aswrange(Instruction inst)
visit_aswrange in interface InstructionVisitorvisit_aswrange in class InstructionAdapter