package jvm.command.item.impl;
import jvm.classfile.ClassFile;
import jvm.classfile.ConstantPool;
import jvm.classfile.constant.item.Constant;
import jvm.classfile.constant.item.impl.ClassInfo;
import jvm.classfile.constant.item.impl.FloatInfo;
import jvm.classfile.constant.item.impl.IntegerInfo;
import jvm.classfile.constant.item.impl.StringInfo;
import jvm.command.CommandIterator;
import jvm.command.item.OneOperandCmd;
import jvm.engine.ExecutionResult;
import jvm.engine.Heap;
import jvm.engine.JavaObject;
import jvm.engine.StackFrame;
public class LdcCmd extends OneOperandCmd {
public LdcCmd(ClassFile clzFile, String opCode, CommandIterator iterator) {
super(clzFile, opCode, iterator);
}
@Override
public String toString(ConstantPool pool) {
Constant info = pool.getConstantInfo(this.getOperand());
String value = "TBD";
if (info instanceof StringInfo) {
StringInfo strInfo = (StringInfo) info;
value = strInfo.toString();
}
return this.getOffset() + ":" + this.getOpCode() + " " + this.getReadableCodeText() + " " + value;
}
@Override
public void execute(StackFrame frame, ExecutionResult result) {
int op = getOperand();
Constant constant = getConstantInfo(op);
JavaObject object = Heap.getInstance().createObject(constant);
frame.getOperandStack().push(object);
}
}