org.objectweb.asm.Opcodes# IALOAD 源码实例Demo

下面列出了org.objectweb.asm.Opcodes# IALOAD 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。


@Override
public void visitInsn(int opcode) {
    switch (opcode) {
    case Opcodes.AALOAD:
    case Opcodes.LALOAD:
    case Opcodes.FALOAD:
    case Opcodes.DALOAD:
    case Opcodes.IALOAD:
        invokeBeforeSharedVariableRead();
        break;
    case Opcodes.AASTORE:
    case Opcodes.IASTORE:
    case Opcodes.LASTORE:
    case Opcodes.FASTORE:
    case Opcodes.DASTORE:
        invokeBeforeSharedVariableWrite();
        break;
    }
    super.visitInsn(opcode);
}
 
源代码2 项目: Concurnas   文件: Utils.java

public static void applyArrayLoad(BytecodeOutputter mv, Type origType) {
	if(origType instanceof PrimativeType && origType.getArrayLevels() == 1 )
	{
		PrimativeTypeEnum ee = ((PrimativeType)origType).type;
		int op;
		switch(ee)
		{
			case BOOLEAN: op = Opcodes.BALOAD; break; 
			case CHAR: op = Opcodes.CALOAD; break; 
			case FLOAT: op = Opcodes.FALOAD; break; 
			case DOUBLE: op = Opcodes.DALOAD; break; 
			case SHORT: op = Opcodes.SALOAD; break; 
			case INT: op = Opcodes.IALOAD; break; 
			case BYTE: op = Opcodes.BALOAD; break; 
			default: op = Opcodes.LALOAD; break;//long 
		}
		mv.visitInsn(op);
		
	}
	else
	{//HERE BE PROBLEMS
		if(TypeCheckUtils.hasRefLevelsAndIsArray(origType)){
			mv.visitInsn(Opcodes.SWAP);
			extractAndCastArrayRef(mv, origType);
			mv.visitInsn(Opcodes.SWAP);
		}
		
		mv.visitInsn(Opcodes.AALOAD);
	}
}
 
源代码3 项目: serianalyzer   文件: JVMImpl.java

/**
 * @param opcode
 * @return
 */
private static Type toType ( int opcode ) {
    switch ( opcode ) {
    case Opcodes.LLOAD:
        return Type.LONG_TYPE;
    case Opcodes.ILOAD:
        return Type.INT_TYPE;
    case Opcodes.FLOAD:
        return Type.FLOAT_TYPE;
    case Opcodes.DLOAD:
        return Type.DOUBLE_TYPE;
    case Opcodes.ALOAD:
        return Type.getType("Ljava/lang/Object;"); //$NON-NLS-1$
    case Opcodes.IALOAD:
        return Type.INT_TYPE;
    case Opcodes.LALOAD:
        return Type.LONG_TYPE;
    case Opcodes.FALOAD:
        return Type.FLOAT_TYPE;
    case Opcodes.DALOAD:
        return Type.DOUBLE_TYPE;
    case Opcodes.BALOAD:
        return Type.BYTE_TYPE;
    case Opcodes.CALOAD:
        return Type.CHAR_TYPE;
    case Opcodes.SALOAD:
        return Type.SHORT_TYPE;
    }
    return Type.VOID_TYPE;
}
 
源代码4 项目: Mixin   文件: BeforeFieldAccess.java

public BeforeFieldAccess(InjectionPointData data) {
    super(data);
    this.opcode = data.getOpcode(-1, Opcodes.GETFIELD, Opcodes.PUTFIELD, Opcodes.GETSTATIC, Opcodes.PUTSTATIC, -1);
    
    String array = data.get("array", "");
    this.arrOpcode = BeforeFieldAccess.ARRAY_GET.equalsIgnoreCase(array) ? Opcodes.IALOAD
            : BeforeFieldAccess.ARRAY_SET.equalsIgnoreCase(array) ? Opcodes.IASTORE
            : BeforeFieldAccess.ARRAY_LENGTH.equalsIgnoreCase(array) ? Opcodes.ARRAYLENGTH : 0;
    this.fuzzFactor = Math.min(Math.max(data.get("fuzz", BeforeFieldAccess.ARRAY_SEARCH_FUZZ_DEFAULT), 1), 32);
}
 
源代码5 项目: es6draft   文件: InstructionAssembler.java

public final void aload(Type type) {
    switch (type.getOpcode(Opcodes.IALOAD)) {
    case Opcodes.IALOAD:
        iaload();
        return;
    case Opcodes.LALOAD:
        laload();
        return;
    case Opcodes.FALOAD:
        faload();
        return;
    case Opcodes.DALOAD:
        daload();
        return;
    case Opcodes.AALOAD:
        aaload();
        return;
    case Opcodes.BALOAD:
        baload();
        return;
    case Opcodes.CALOAD:
        caload();
        return;
    case Opcodes.SALOAD:
        saload();
        return;
    default:
        throw new IllegalArgumentException();
    }
}
 
源代码6 项目: zelixkiller   文件: StackHelper.java

public InsnValue loadFromArray(AbstractInsnNode insn, InsnValue value1, InsnValue indexValue) throws AnalyzerException {
	Object indexObj = indexValue.getValue(), arrayObj = value1.getValue();
	int index = indexObj == null ? -1 : ((Number) indexObj).intValue();
	boolean arrayNotSimulated = arrayObj == null;
	Type t = arrayNotSimulated ? null : Type.getType(arrayObj.getClass());
	switch (insn.getOpcode()) {
	case Opcodes.IALOAD:
		if (arrayNotSimulated) {
			return InsnValue.INT_VALUE;
		}
		// Sometimes Object[] contain values. Stringer obfuscator does this.
		// TODO: Have this sort of check for others?
		boolean oarr = t.equals(InsnValue.REFERENCE_ARR_VALUE.getType());
		if (oarr) {
			int[] ia = (int[]) arrayObj;
			return InsnValue.intValue(ia[index]);
		}else{
			Object[] obarr = (Object[]) arrayObj;
			Object o = obarr[index];
			if (o == null){
				return InsnValue.INT_VALUE;
			}
			return InsnValue.intValue(((Number) o).intValue());
		}
	case Opcodes.LALOAD:
		if (arrayNotSimulated) {
			return InsnValue.LONG_VALUE;
		}
		long[] la = (long[]) arrayObj;
		return InsnValue.longValue(la[index]);
	case Opcodes.FALOAD:
		if (arrayNotSimulated) {
			return InsnValue.FLOAT_VALUE;
		}
		float[] fa = (float[]) arrayObj;
		return InsnValue.floatValue(fa[index]);
	case Opcodes.DALOAD:
		if (arrayNotSimulated) {
			return InsnValue.DOUBLE_VALUE;
		}
		double[] da = (double[]) arrayObj;
		return InsnValue.doubleValue(da[index]);
	case Opcodes.AALOAD:
		// TODO: Check if it's an object array, but the contents aren't objects
		return InsnValue.REFERENCE_VALUE;
	case Opcodes.BALOAD:
		if (arrayNotSimulated) {
			return InsnValue.BYTE_VALUE;
		}
		boolean db = t.equals(InsnValue.DOUBLE_ARR_VALUE.getType()), in = t.equals(InsnValue.INT_ARR_VALUE.getType()), saa = t.equals(InsnValue.SHORT_ARR_VALUE.getType());
		if (db) {
			double[] dba = (double[]) arrayObj;
			return InsnValue.intValue(dba[index]);
		} else if (in) {
			int[] ina = (int[]) arrayObj;
			return InsnValue.intValue(ina[index]);
		} else if (saa){
			short[] saaa = (short[]) arrayObj;
			return InsnValue.intValue(saaa[index]);
		} else {
			System.err.println("UNKNOWN TYPE BALOAD: " + t);
			throw new RuntimeException();
		}

	case Opcodes.CALOAD:
		if (arrayNotSimulated) {
			return InsnValue.CHAR_VALUE;
		}
		char[] ca = (char[]) arrayObj;
		return InsnValue.charValue(ca[index]);
	case Opcodes.SALOAD:
		if (arrayNotSimulated) {
			return InsnValue.SHORT_VALUE;
		}
		short[] sa = (short[]) arrayObj;
		return InsnValue.intValue((short) sa[index]);
	}

	return null;
}
 

private void pushProductOfIntArrayOnStack() {
  Label beginScopeLabel = new Label();
  Label endScopeLabel = new Label();

  int dimsArrayIndex = newLocal("[I", beginScopeLabel, endScopeLabel);
  int counterIndex = newLocal("I", beginScopeLabel, endScopeLabel);
  int productIndex = newLocal("I", beginScopeLabel, endScopeLabel);
  Label loopLabel = new Label();
  Label endLabel = new Label();

  super.visitLabel(beginScopeLabel);

  // stack: ... intArray
  super.visitVarInsn(Opcodes.ASTORE, dimsArrayIndex);
  // -> stack: ...

  // counter = 0
  super.visitInsn(Opcodes.ICONST_0);
  super.visitVarInsn(Opcodes.ISTORE, counterIndex);
  // product = 1
  super.visitInsn(Opcodes.ICONST_1);
  super.visitVarInsn(Opcodes.ISTORE, productIndex);
  // loop:
  super.visitLabel(loopLabel);
  // if index >= arraylength goto end:
  super.visitVarInsn(Opcodes.ILOAD, counterIndex);
  super.visitVarInsn(Opcodes.ALOAD, dimsArrayIndex);
  super.visitInsn(Opcodes.ARRAYLENGTH);
  super.visitJumpInsn(Opcodes.IF_ICMPGE, endLabel);
  // product = product * max(array[counter],1)
  super.visitVarInsn(Opcodes.ALOAD, dimsArrayIndex);
  super.visitVarInsn(Opcodes.ILOAD, counterIndex);
  super.visitInsn(Opcodes.IALOAD);
  super.visitInsn(Opcodes.DUP);
  Label nonZeroDimension = new Label();
  super.visitJumpInsn(Opcodes.IFNE, nonZeroDimension);
  super.visitInsn(Opcodes.POP);
  super.visitInsn(Opcodes.ICONST_1);
  super.visitLabel(nonZeroDimension);
  super.visitVarInsn(Opcodes.ILOAD, productIndex);
  super.visitInsn(Opcodes.IMUL); // if overflow happens it happens.
  super.visitVarInsn(Opcodes.ISTORE, productIndex);
  // iinc counter 1
  super.visitIincInsn(counterIndex, 1);
  // goto loop
  super.visitJumpInsn(Opcodes.GOTO, loopLabel);
  // end:
  super.visitLabel(endLabel);
  // re-push dimensions array
  super.visitVarInsn(Opcodes.ALOAD, dimsArrayIndex);
  // push product
  super.visitVarInsn(Opcodes.ILOAD, productIndex);

  super.visitLabel(endScopeLabel);
}
 
源代码8 项目: CodenameOne   文件: ArrayLoadExpression.java

public static int tryReduce(List<Instruction> instructions, int index) {
    Instruction instr = instructions.get(index);
    switch (instr.getOpcode()) {
        case Opcodes.AALOAD:
        case Opcodes.FALOAD:
        case Opcodes.CALOAD:
        case Opcodes.DALOAD:
        case Opcodes.BALOAD:
        case Opcodes.IALOAD:
        case Opcodes.LALOAD:
        case Opcodes.SALOAD:
            break;
        default:
            return -1;
    }
    
    if (index < 2) {
        return -1;
    }
    
    Instruction indexInstr = instructions.get(index-1);
    if (!(indexInstr instanceof AssignableExpression)) {
        return -1;
    }
    
    Instruction arrInstr = instructions.get(index-2);
    if (!(arrInstr instanceof AssignableExpression)) {
        return -1;
    }
    
    ArrayLoadExpression out = new ArrayLoadExpression();
    out.loadInstruction = instr;
    out.indexInstruction = indexInstr;
    out.targetArrayInstruction = arrInstr;
    
    instructions.remove(index-2);
    instructions.remove(index-2);
    instructions.remove(index-2);
    instructions.add(index-2, out);
    return index-2;
}
 
源代码9 项目: pitest   文件: UOI3Mutator.java

@Override
public void visitInsn(final int opcode) {
    // I F L D + BS
    switch (opcode) {
        case Opcodes.IALOAD:
            if (this.shouldMutate("Incremented (++a) integer array field")) {
                mv.visitInsn(Opcodes.DUP2); // stack = ... [array] [index] [array] [index]
                mv.visitInsn(opcode); // stack = ... [array] [index] [array[index]]
                mv.visitInsn(Opcodes.ICONST_1); // stack = ... [array] [index] [array[index]] [1]
                mv.visitInsn(Opcodes.IADD); // stack = ... [array] [index] [array[index]+1]
                mv.visitInsn(Opcodes.DUP_X2); // stack = ... [array[index]+1] [array] [index] [array[index]+1]
                mv.visitInsn(Opcodes.IASTORE); // stack = ... [array[index]+1]
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.FALOAD:
            if (this.shouldMutate("Incremented (++a) float array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.FCONST_1);
                mv.visitInsn(Opcodes.FADD);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.FASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.LALOAD:
            if (this.shouldMutate("Incremented (++a) long array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.LCONST_1);
                mv.visitInsn(Opcodes.LADD);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.LASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.DALOAD:
            if (this.shouldMutate("Incremented (++a) double array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DCONST_1);
                mv.visitInsn(Opcodes.DADD);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.DASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.BALOAD:
            if (this.shouldMutate("Incremented (++a) byte array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.IADD);
                mv.visitInsn(Opcodes.I2B);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.BASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.SALOAD:
            if (this.shouldMutate("Incremented (++a) short array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.IADD);
                mv.visitInsn(Opcodes.I2S);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.SASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        default:
            mv.visitInsn(opcode);
            break;
    }
}
 
源代码10 项目: pitest   文件: UOI1Mutator.java

@Override
public void visitInsn(final int opcode) {
    // I F L D + BS
    switch (opcode) {
        case Opcodes.IALOAD:
            if (this.shouldMutate("Incremented (a++) integer array field")) {
                mv.visitInsn(Opcodes.DUP2); // stack = ... [array] [index] [array] [index]
                mv.visitInsn(opcode); // stack = ... [array] [index] [array[index]]
                mv.visitInsn(Opcodes.DUP_X2); //stack = ... [array[index]] [array] [index] [array[index]]
                mv.visitInsn(Opcodes.ICONST_1); //stack = ... [array[index]] [array] [index] [array[index]] [1]
                mv.visitInsn(Opcodes.IADD); //stack = ... [array[index]] [array] [index] [array[index] + 1]
                mv.visitInsn(Opcodes.IASTORE); //stack = ... [array[index]]
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.FALOAD:
            if (this.shouldMutate("Incremented (a++) float array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.FCONST_1);
                mv.visitInsn(Opcodes.FADD);
                mv.visitInsn(Opcodes.FASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.LALOAD:
            if (this.shouldMutate("Incremented (a++) long array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.LCONST_1);
                mv.visitInsn(Opcodes.LADD);
                mv.visitInsn(Opcodes.LASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.DALOAD:
            if (this.shouldMutate("Incremented (a++) double array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.DCONST_1);
                mv.visitInsn(Opcodes.DADD);
                mv.visitInsn(Opcodes.DASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.BALOAD:
            if (this.shouldMutate("Incremented (a++) byte array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.IADD);
                mv.visitInsn(Opcodes.I2B);
                mv.visitInsn(Opcodes.BASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.SALOAD:
            if (this.shouldMutate("Incremented (a++) short array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.IADD);
                mv.visitInsn(Opcodes.I2S);
                mv.visitInsn(Opcodes.SASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        default:
            mv.visitInsn(opcode);
            break;
    }
}
 
源代码11 项目: pitest   文件: UOI4Mutator.java

@Override
public void visitInsn(final int opcode) {
    // I F L D + BS
    switch (opcode) {
        case Opcodes.IALOAD:
            if (this.shouldMutate("Decremented (--a) integer array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.ISUB);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.IASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.FALOAD:
            if (this.shouldMutate("Decremented (--a) float array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.FCONST_1);
                mv.visitInsn(Opcodes.FSUB);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.FASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.LALOAD:
            if (this.shouldMutate("Decremented (--a) long array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.LCONST_1);
                mv.visitInsn(Opcodes.LSUB);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.LASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.DALOAD:
            if (this.shouldMutate("Decremented (--a) double array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DCONST_1);
                mv.visitInsn(Opcodes.DSUB);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.DASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.BALOAD:
            if (this.shouldMutate("Decremented (--a) byte array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.ISUB);
                mv.visitInsn(Opcodes.I2B);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.BASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.SALOAD:
            if (this.shouldMutate("Decremented (--a) short array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.ISUB);
                mv.visitInsn(Opcodes.I2S);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.SASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        default:
            mv.visitInsn(opcode);
            break;
    }
}
 
源代码12 项目: pitest   文件: UOI2Mutator.java

@Override
public void visitInsn(final int opcode) {
    // I F L D + BS
    switch (opcode) {
        case Opcodes.IALOAD:
            if (this.shouldMutate("Decremented (a--) integer array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.ISUB);
                mv.visitInsn(Opcodes.IASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.FALOAD:
            if (this.shouldMutate("Decremented (a--) float array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.FCONST_1);
                mv.visitInsn(Opcodes.FSUB);
                mv.visitInsn(Opcodes.FASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.LALOAD:
            if (this.shouldMutate("Decremented (a--) long array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.LCONST_1);
                mv.visitInsn(Opcodes.LSUB);
                mv.visitInsn(Opcodes.LASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;
        case Opcodes.DALOAD:
            if (this.shouldMutate("Decremented (a--) double array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP2_X2);
                mv.visitInsn(Opcodes.DCONST_1);
                mv.visitInsn(Opcodes.DSUB);
                mv.visitInsn(Opcodes.DASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.BALOAD:
            if (this.shouldMutate("Decremented (a--) byte array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.ISUB);
                mv.visitInsn(Opcodes.I2B);
                mv.visitInsn(Opcodes.BASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        case Opcodes.SALOAD:
            if (this.shouldMutate("Decremented (a--) short array field")) {
                mv.visitInsn(Opcodes.DUP2);
                mv.visitInsn(opcode);
                mv.visitInsn(Opcodes.DUP_X2);
                mv.visitInsn(Opcodes.ICONST_1);
                mv.visitInsn(Opcodes.ISUB);
                mv.visitInsn(Opcodes.I2S);
                mv.visitInsn(Opcodes.SASTORE);
            } else {
                mv.visitInsn(opcode);
            }
            break;

        default:
            mv.visitInsn(opcode);
            break;
    }
}
 
源代码13 项目: pitest   文件: ABSMutator.java

@Override
public void visitInsn(final int opcode) {
    mv.visitInsn(opcode);
    switch (opcode) {
        // ARRAYS I F L D , loading
        case Opcodes.IALOAD:
            if (this.shouldMutate("Negated integer array field")) {
                mv.visitInsn(Opcodes.INEG);
            }
            break;

        case Opcodes.FALOAD:
            if (this.shouldMutate("Negated float array field")) {
                mv.visitInsn(Opcodes.FNEG);
            }
            break;

        case Opcodes.LALOAD:
            if (this.shouldMutate("Negated long array field")) {
                mv.visitInsn(Opcodes.LNEG);
            }
            break;

        case Opcodes.DALOAD:
            if (this.shouldMutate("Negated double array field")) {
                mv.visitInsn(Opcodes.DNEG);
            }
            break;

        case Opcodes.BALOAD:
            if (this.shouldMutate("Negated byte array field")) {
                mv.visitInsn(Opcodes.INEG);
                mv.visitInsn(Opcodes.I2B);
            }
            break;

        case Opcodes.SALOAD:
            if (this.shouldMutate("Negated short array field")) {
                mv.visitInsn(Opcodes.INEG);
                mv.visitInsn(Opcodes.I2S);
            }
            break;

        default:
            break;
    }
}
 
 方法所在类
 同类方法