src/share/classes/jdk/internal/org/objectweb/asm/tree/analysis/SourceInterpreter.java

Print this page

        

*** 74,88 **** * An {@link Interpreter} for {@link SourceValue} values. * * @author Eric Bruneton */ public class SourceInterpreter extends Interpreter<SourceValue> implements ! Opcodes ! { public SourceInterpreter() { ! super(ASM4); } protected SourceInterpreter(final int api) { super(api); } --- 74,87 ---- * An {@link Interpreter} for {@link SourceValue} values. * * @author Eric Bruneton */ public class SourceInterpreter extends Interpreter<SourceValue> implements ! Opcodes { public SourceInterpreter() { ! super(ASM5); } protected SourceInterpreter(final int api) { super(api); }
*** 117,133 **** } return new SourceValue(size, insn); } @Override ! public SourceValue copyOperation(final AbstractInsnNode insn, final SourceValue value) { return new SourceValue(value.getSize(), insn); } @Override ! public SourceValue unaryOperation(final AbstractInsnNode insn, final SourceValue value) ! { int size; switch (insn.getOpcode()) { case LNEG: case DNEG: case I2L: --- 116,133 ---- } return new SourceValue(size, insn); } @Override ! public SourceValue copyOperation(final AbstractInsnNode insn, ! final SourceValue value) { return new SourceValue(value.getSize(), insn); } @Override ! public SourceValue unaryOperation(final AbstractInsnNode insn, ! final SourceValue value) { int size; switch (insn.getOpcode()) { case LNEG: case DNEG: case I2L:
*** 146,160 **** } return new SourceValue(size, insn); } @Override ! public SourceValue binaryOperation( ! final AbstractInsnNode insn, ! final SourceValue value1, ! final SourceValue value2) ! { int size; switch (insn.getOpcode()) { case LALOAD: case DALOAD: case LADD: --- 146,157 ---- } return new SourceValue(size, insn); } @Override ! public SourceValue binaryOperation(final AbstractInsnNode insn, ! final SourceValue value1, final SourceValue value2) { int size; switch (insn.getOpcode()) { case LALOAD: case DALOAD: case LADD:
*** 180,225 **** } return new SourceValue(size, insn); } @Override ! public SourceValue ternaryOperation( ! final AbstractInsnNode insn, ! final SourceValue value1, ! final SourceValue value2, ! final SourceValue value3) ! { return new SourceValue(1, insn); } @Override ! public SourceValue naryOperation(final AbstractInsnNode insn, final List<? extends SourceValue> values) { int size; int opcode = insn.getOpcode(); if (opcode == MULTIANEWARRAY) { size = 1; } else { ! String desc = (opcode == INVOKEDYNAMIC)? ! ((InvokeDynamicInsnNode) insn).desc: ! ((MethodInsnNode) insn).desc; size = Type.getReturnType(desc).getSize(); } return new SourceValue(size, insn); } @Override ! public void returnOperation( ! final AbstractInsnNode insn, ! final SourceValue value, ! final SourceValue expected) ! { } @Override public SourceValue merge(final SourceValue d, final SourceValue w) { if (d.insns instanceof SmallSet && w.insns instanceof SmallSet) { ! Set<AbstractInsnNode> s = ((SmallSet<AbstractInsnNode>) d.insns).union((SmallSet<AbstractInsnNode>) w.insns); if (s == d.insns && d.size == w.size) { return d; } else { return new SourceValue(Math.min(d.size, w.size), s); } --- 177,217 ---- } return new SourceValue(size, insn); } @Override ! public SourceValue ternaryOperation(final AbstractInsnNode insn, ! final SourceValue value1, final SourceValue value2, ! final SourceValue value3) { return new SourceValue(1, insn); } @Override ! public SourceValue naryOperation(final AbstractInsnNode insn, ! final List<? extends SourceValue> values) { int size; int opcode = insn.getOpcode(); if (opcode == MULTIANEWARRAY) { size = 1; } else { ! String desc = (opcode == INVOKEDYNAMIC) ? ((InvokeDynamicInsnNode) insn).desc ! : ((MethodInsnNode) insn).desc; size = Type.getReturnType(desc).getSize(); } return new SourceValue(size, insn); } @Override ! public void returnOperation(final AbstractInsnNode insn, ! final SourceValue value, final SourceValue expected) { } @Override public SourceValue merge(final SourceValue d, final SourceValue w) { if (d.insns instanceof SmallSet && w.insns instanceof SmallSet) { ! Set<AbstractInsnNode> s = ((SmallSet<AbstractInsnNode>) d.insns) ! .union((SmallSet<AbstractInsnNode>) w.insns); if (s == d.insns && d.size == w.size) { return d; } else { return new SourceValue(Math.min(d.size, w.size), s); }