package com.coderising.jvm.cmd; import com.coderising.jvm.clz.ClassFile; import com.coderising.jvm.constant.ClassInfo; import com.coderising.jvm.constant.ConstantInfo; import com.coderising.jvm.constant.ConstantPool; import com.coderising.jvm.constant.FieldRefInfo; import com.coderising.jvm.constant.MethodRefInfo; import com.coderising.jvm.engine.ExecutionResult; import com.coderising.jvm.engine.StackFrame; public class TwoOperandCmd extends ByteCodeCommand{ // ���������� int oprand1 = -1; int oprand2 = -1; public int getOprand1() { return oprand1; } public void setOprand1(int oprand1) { this.oprand1 = oprand1; } public int getOprand2() { return oprand2; } public void setOprand2(int oprand2) { this.oprand2 = oprand2; } protected TwoOperandCmd(ClassFile clzFile, String opCode) { super(clzFile, opCode); } public int getIndex(){ int oprand1 = this.getOprand1(); int oprand2 = this.getOprand2(); int index = oprand1 << 8 | oprand2; return index; } protected String getOperandAsClassInfo(ConstantPool pool){ int index = getIndex(); String codeTxt = getReadableCodeText(); ClassInfo info = (ClassInfo)pool.getConstantInfo(index); return this.getOffset()+":"+this.getOpCode()+" "+ codeTxt +" "+ info.getClassName(); } protected String getOperandAsMethod(ConstantPool pool){ int index = getIndex(); String codeTxt = getReadableCodeText(); ConstantInfo constInfo = this.getConstantInfo(index); MethodRefInfo info = (MethodRefInfo)this.getConstantInfo(index); return this.getOffset()+":"+this.getOpCode()+" " + codeTxt +" "+ info.toString(); } protected String getOperandAsField(ConstantPool pool){ int index = getIndex(); String codeTxt = getReadableCodeText(); FieldRefInfo info = (FieldRefInfo)this.getConstantInfo(index); return this.getOffset()+":"+this.getOpCode()+" " + codeTxt +" "+ info.toString(); } @Override public int getLength() { return 3; } @Override public String toString(ConstantPool pool) { return null; } @Override public void execute(StackFrame frame, ExecutionResult result) { } }