package me.tomassetti.bytecode_generation;
import me.tomassetti.jvm.JvmMethodDefinition;
import me.tomassetti.jvm.JvmType;
import org.objectweb.asm.MethodVisitor;
/**
* It expects the value to be already on the stack.
*/
public class UnboxBS extends BytecodeSequence {
private JvmType jvmType;
public UnboxBS(JvmType jvmType) {
this.jvmType = jvmType;
}
@Override
public void operate(MethodVisitor mv) {
if (jvmType.equals(new JvmType("I"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Integer", "intValue", "()I", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("Z"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Boolean", "booleanValue", "()Z", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("C"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Character", "charValue", "()C", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("B"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Byte", "byteValue", "()B", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("S"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Short", "shortValue", "()S", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("J"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Long", "longValue", "()J", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("F"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Float", "floatValue", "()F", false, false)).operate(mv);
} else if (jvmType.equals(new JvmType("D"))) {
new MethodInvocationBS(new JvmMethodDefinition("java/lang/Double", "doubleValue", "()D", false, false)).operate(mv);
} else {
throw new UnsupportedOperationException(jvmType.toString());
}
}
}