opu.lljvm-python.0.2.0-EXPERIMENTAL.source-code.CatchEntry Maven / Gradle / Ivy
The newest version!
/**
* This class
* is used to build up entries in a catch table.
* @see Catchtable
* @author $Author: jonmeyerny $
* @version $Revision: 1.1 $
*/
package jas;
import java.io.*;
public class CatchEntry
{
Label start_pc, end_pc, handler_pc;
int start_off, end_off, handler_off;
CP catch_cpe;
/**
* Catch entries are created and then added to the Catchtable.
* @param start Label marking the beginning of the area
* where the catch table is active.
* @param end Label marking the end of the area where the
* table is active.
* @param handler Label marking the entrypoint into the
* exception handling routine.
* @param cat (usually a classCP) informing the VM to direct
* any exceptions of this (or its subclasses) to the handler.
* @see Catchtable
*/
public
CatchEntry(Label start, Label end, Label handler, CP cat)
{
start_pc = start;
end_pc = end;
handler_pc = handler;
catch_cpe = cat;
}
/**
* Catch entries are created and then added to the Catchtable.
* @param start offset marking the beginning of the area
* where the catch table is active.
* @param end offset marking the end of the area where the
* table is active.
* @param handler offset marking the entrypoint into the
* exception handling routine.
* @param cat (usually a classCP) informing the VM to direct
* any exceptions of this (or its subclasses) to the handler.
* @see Catchtable
*/
public
CatchEntry(int start, int end, int handler, CP cat)
{
start_off = start;
end_off = end;
handler_off = handler;
catch_cpe = cat;
}
void resolve(ClassEnv e)
{ if (catch_cpe != null) e.addCPItem(catch_cpe); }
void write(ClassEnv e, CodeAttr ce, DataOutputStream out)
throws IOException, jasError
{
if(start_pc!=null && end_pc != null && handler_pc != null) {
start_pc.writeOffset(ce, null, out);
end_pc.writeOffset(ce, null, out);
handler_pc.writeOffset(ce, null, out);
} else {
out.writeShort(start_off);
out.writeShort(end_off);
out.writeShort(handler_off);
}
if (catch_cpe != null)
{ out.writeShort(e.getCPIndex(catch_cpe)); }
else
{ out.writeShort(0); }
}
}