opu.lljvm-python.0.2.0-EXPERIMENTAL.source-code.LocalVarEntry Maven / Gradle / Ivy
The newest version!
/**
* This is an entry to be used as part of a LocalVarTableAttr and LocalVarTypeTable.
* It defines the scope and location of a local variable for a method
* and is used while debugging.
*/
package jas;
import java.io.*;
public class LocalVarEntry
{
Label start, end;
CP name, sig;
int slot, starto, endo;
/**
* Create local variable scope information that can be used
* while debugging.
* @param startLabel beginning of scope for variable
* @param endLabel end of scope for variable
* @param name name of variable
* @param sig signature for variable
* @param slot index of the local variable in the local variables
* registers of the VM where its value can be found
*/
public LocalVarEntry
(Label startLabel, Label endLabel, String name, String sig, int slot)
{
start = startLabel;
end = endLabel;
this.name = new AsciiCP(name);
this.sig = new AsciiCP(sig);
this.slot = slot;
}
/**
* Create local variable scope information that can be used
* while debugging.
* @param startOffset beginning of scope for variable
* @param endOffset end of scope for variable
* @param name name of variable
* @param sig signature for variable
* @param slot index of the local variable in the local variables
* registers of the VM where its value can be found
*/
public LocalVarEntry
(int startOffset, int endOffset, String name, String sig, int slot)
{
starto = startOffset;
endo = endOffset;
this.name = new AsciiCP(name);
this.sig = new AsciiCP(sig);
this.slot = slot;
}
/**
* Create local variable scope information that can be used
* while debugging.
* @param startLabel beginning of scope for variable
* @param endLabel end of scope for variable
* @param name CP to be associated as name of variable
* @param sig CP to be associated as signature for variable
* @param slot The index of the local variable in the local
* variables part of the VM where its value can be found
*/
public LocalVarEntry
(Label startLabel, Label endLabel, CP name, CP sig, int slot)
{
start = startLabel;
end = endLabel;
this.name = name;
this.sig = sig;
this.slot = slot;
}
void resolve(ClassEnv e)
{ e.addCPItem(name); e.addCPItem(sig); }
void write(ClassEnv e, CodeAttr ce, DataOutputStream out)
throws IOException, jasError
{
if(start!=null && end!=null) {
start.writeOffset(ce, null, out);
end.writeOffset(ce, start, out); // This is the *length*,
// not another offset
} else {
out.writeShort(starto);
out.writeShort(endo - starto);
}
out.writeShort(e.getCPIndex(name));
out.writeShort(e.getCPIndex(sig));
out.writeShort((short)slot);
}
}