package jvm.command.item.impl;
import jvm.classfile.ClassFile;
import jvm.classfile.ConstantPool;
import jvm.classfile.constant.item.Constant;
import jvm.command.CommandIterator;
import jvm.command.item.TwoOperandCmd;
import jvm.engine.ExecutionResult;
import jvm.engine.Heap;
import jvm.engine.JavaObject;
import jvm.engine.StackFrame;
public class NewCmd extends TwoOperandCmd {
public NewCmd(ClassFile clzFile, String opCode, CommandIterator iterator) {
super(clzFile, opCode, iterator);
}
@Override
public String toString(ConstantPool pool) {
return super.getOperandAsClassInfo(pool);
}
@Override
public void execute(StackFrame frame, ExecutionResult result) {
int index = (getOperand1() << 8) | getOperand2();
Constant constant = getConstantInfo(index);
JavaObject object = Heap.getInstance().createObject(constant);
frame.getOperandStack().push(object);
}
}