package js.tinyvm;
import java.io.IOException;
import js.tinyvm.io.IByteWriter;
import org.apache.bcel.classfile.Field;
public class StaticFieldRecord implements WritableData
{
ClassRecord iClassRecord;
Field iField;
boolean isUsed = false;
public StaticFieldRecord (Field aEntry, ClassRecord aRec)
{
iField = aEntry;
iClassRecord = aRec;
}
public String getName ()
{
return iField.getName();
}
public int getLength ()
{
return 2;
}
public void dump (IByteWriter aOut) throws TinyVMException
{
TinyVMType type = TinyVMType.tinyVMType(iField.getType());
int pOffset = iClassRecord.getStaticFieldOffset(iField.getName());
assert pOffset >= 0 && pOffset <= 0x0FFF: "Check offset in range";
try
{
aOut.writeU2((type.type() << 12) | pOffset);
}
catch (IOException e)
{
throw new TinyVMException(e.getMessage(), e);
}
}
public boolean equals (Object aOther)
{
if (!(aOther instanceof StaticFieldRecord))
return false;
return ((StaticFieldRecord) aOther).iField.equals(iField)
&& ((StaticFieldRecord) aOther).iClassRecord.equals(iClassRecord);
}
public int hashCode ()
{
return iField.hashCode() ^ iClassRecord.hashCode();
}
public void markUsed()
{
isUsed = true;
}
public boolean used()
{
return isUsed;
}
public ClassRecord getClassRecord()
{
return iClassRecord;
}
}