package com.coderising.jvm.attr;
import com.coderising.jvm.constant.ConstantPool;
import com.coderising.jvm.loader.ByteCodeIterator;
public class LocalVariableItem {
private int startPC;
private int length;
private int nameIndex;
private int descIndex;
private int index;
private ConstantPool constPool;
public LocalVariableItem(ConstantPool pool){
this.constPool = pool;
}
public int getStartPC() {
return startPC;
}
public void setStartPC(int startPC) {
this.startPC = startPC;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getNameIndex() {
return nameIndex;
}
public void setNameIndex(int nameIndex) {
this.nameIndex = nameIndex;
}
public int getDescIndex() {
return descIndex;
}
public void setDescIndex(int descIndex) {
this.descIndex = descIndex;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public static LocalVariableItem parse(ByteCodeIterator iter, ConstantPool pool){
LocalVariableItem item = new LocalVariableItem(pool);
int startPc = iter.getNextNBytesInteger(2);
int length = iter.getNextNBytesInteger(2);
int nameIndex = iter.getNextNBytesInteger(2);
int descriptorIndex = iter.getNextNBytesInteger(2);
int index = iter.getNextNBytesInteger(2);
item.setStartPC(startPc);
item.setLength(length);
item.setNameIndex(nameIndex);
item.setDescIndex(descriptorIndex);
item.setIndex(index);
return item;
}
@Override
public String toString() {
return "LocalVariableItem [startPC=" + startPC + ", length=" + length
+ ", nameIndex=" + nameIndex + " val: " + constPool.getUTF8String(nameIndex) + ", descIndex=" + descIndex
+ " val: " + constPool.getUTF8String(descIndex) + ", index=" + index + "]";
}
}