private static void removeJsrInstructions(ConstantPool pool, BasicBlock block, DataPoint data) { ListStack<VarType> stack = data.getStack(); BasicBlock suc = block.getSuccs().get(i); if (suc.mark != 1) { removeJsrInstructions(pool, suc, data.copy()); if (suc.mark != 1) { DataPoint point = new DataPoint(); point.setLocalVariables(new ArrayList<>(data.getLocalVariables())); point.getStack().push(new VarType(CodeConstants.TYPE_OBJECT, 0, null));
private void removeJsr(StructMethod mt) { removeJsrInstructions(mt.getClassStruct().getPool(), first, DataPoint.getInitialDataPoint(mt)); }
public DataPoint copy() { DataPoint point = new DataPoint(); point.setLocalVariables(new ArrayList<>(localVariables)); point.setStack(stack.clone()); return point; }
public static DataPoint getInitialDataPoint(StructMethod mt) { DataPoint point = new DataPoint(); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); int k = 0; if (!mt.hasModifier(CodeConstants.ACC_STATIC)) { point.setVariable(k++, new VarType(CodeConstants.TYPE_OBJECT, 0, null)); } for (int i = 0; i < md.params.length; i++) { VarType var = md.params[i]; point.setVariable(k++, var); if (var.stackSize == 2) { point.setVariable(k++, new VarType(CodeConstants.TYPE_GROUP2EMPTY)); } } return point; }
LinkConstant ck; ListStack<VarType> stack = data.getStack(); var1 = data.getVariable(instr.operand(0)); if (var1 != null) { stack.push(var1); break; case CodeConstants.opc_astore: data.setVariable(instr.operand(0), stack.pop()); break; case CodeConstants.opc_dup:
public static void stepTypes(DataPoint data, Instruction instr, ConstantPool pool) { ListStack<VarType> stack = data.getStack(); int[][] arr = stack_impact[instr.opcode];
LinkConstant ck; ListStack<VarType> stack = data.getStack(); var1 = data.getVariable(instr.getOperand(0)); if (var1 != null) { stack.push(var1); break; case CodeConstants.opc_astore: data.setVariable(instr.getOperand(0), stack.pop()); break; case CodeConstants.opc_dup:
public static DataPoint getInitialDataPoint(StructMethod mt) { DataPoint point = new DataPoint(); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); int k = 0; if (!mt.hasModifier(CodeConstants.ACC_STATIC)) { point.setVariable(k++, new VarType(CodeConstants.TYPE_OBJECT, 0, null)); } for (int i = 0; i < md.params.length; i++) { VarType var = md.params[i]; point.setVariable(k++, var); if (var.stackSize == 2) { point.setVariable(k++, new VarType(CodeConstants.TYPE_GROUP2EMPTY)); } } return point; }
public static void stepTypes(DataPoint data, Instruction instr, ConstantPool pool) { ListStack<VarType> stack = data.getStack(); int[][] arr = stack_impact[instr.opcode];
private static void removeJsrInstructions(ConstantPool pool, BasicBlock block, DataPoint data) { ListStack<VarType> stack = data.getStack(); BasicBlock suc = block.getSuccs().get(i); if (suc.mark != 1) { removeJsrInstructions(pool, suc, data.copy()); if (suc.mark != 1) { DataPoint point = new DataPoint(); point.setLocalVariables(new ArrayList<>(data.getLocalVariables())); point.getStack().push(new VarType(CodeConstants.TYPE_OBJECT, 0, null));
public DataPoint copy() { DataPoint point = new DataPoint(); point.setLocalVariables(new ArrayList<>(localVariables)); point.setStack(stack.clone()); return point; }
private void removeJsr(StructMethod mt) { removeJsrInstructions(mt.getClassStruct().getPool(), first, DataPoint.getInitialDataPoint(mt)); }