verify.cc (branch_prepass): Updated for change to exception handler type.

* verify.cc (branch_prepass): Updated for change to exception
	handler type.
	(verify_instructions_0): Likewise.
	* defineclass.cc (handleCodeAttribute): Initialize `prepared'.
	(handleExceptionTableEntry): Updated for change to exception
	handler type.
	* java/lang/Class.h (Class): Removed _Jv_InterpMethodInvocation.
	* include/java-interp.h (_Jv_InterpMethodInvocation): Removed.
	(union _Jv_InterpPC): New.
	(class _Jv_InterpException): Changed types to _Jv_InterpPC.
	(class _Jv_InterpMethod): Added new `prepared' field.
	(class _Jv_InterpMethod): Added `compile' method.  Removed
	`continue1' and `find_exception'.  Changed arguments to `run'.
	* interpret.cc (union insn_slot): New.
	(find_exception): Removed.
	(run_normal): Removed most logic.
	(run_synch_object): Likewise; also, use JvSynchronize.
	(run_synch_class): Likewise.
	(run): Removed.
	(continue1): Renamed as `run'.  Compile bytecode if required.
	Add new code to allow refinement of direct-threaded code at
	runtime.  Handle exceptions.
	(SAVE_PC): Removed.
	(compile): New method.
	(SET_ONE, SET_INSN, SET_INT, SET_DATUM): New defines.
	(NULLARRAYCHECK): Don't use SAVE_PC.
	(pc_t): New typedef.
	(TAKE_GOTO, GET1S, GET1U, GET2U, AVAL1U, AVAL2U, AVAL2UP,
	SKIP_GOTO, GOTO_VAL, PCVAL, AMPAMP): New macros.

From-SVN: r54968
This commit is contained in:
Tom Tromey
2002-06-24 20:38:47 +00:00
committed by Tom Tromey
parent 7691fc06fe
commit fdae83abe7
6 changed files with 1517 additions and 708 deletions

View File

@@ -1882,18 +1882,18 @@ private:
// Verify exception handlers.
for (int i = 0; i < current_method->exc_count; ++i)
{
if (! (flags[exception[i].handler_pc] & FLAG_INSN_START))
if (! (flags[exception[i].handler_pc.i] & FLAG_INSN_START))
verify_fail ("exception handler not at instruction start",
exception[i].handler_pc);
if (! (flags[exception[i].start_pc] & FLAG_INSN_START))
exception[i].handler_pc.i);
if (! (flags[exception[i].start_pc.i] & FLAG_INSN_START))
verify_fail ("exception start not at instruction start",
exception[i].start_pc);
if (exception[i].end_pc != current_method->code_length
&& ! (flags[exception[i].end_pc] & FLAG_INSN_START))
exception[i].start_pc.i);
if (exception[i].end_pc.i != current_method->code_length
&& ! (flags[exception[i].end_pc.i] & FLAG_INSN_START))
verify_fail ("exception end not at instruction start",
exception[i].end_pc);
exception[i].end_pc.i);
flags[exception[i].handler_pc] |= FLAG_BRANCH_TARGET;
flags[exception[i].handler_pc.i] |= FLAG_BRANCH_TARGET;
}
}
@@ -2186,12 +2186,12 @@ private:
// through them all.
for (int i = 0; i < current_method->exc_count; ++i)
{
if (PC >= exception[i].start_pc && PC < exception[i].end_pc)
if (PC >= exception[i].start_pc.i && PC < exception[i].end_pc.i)
{
type handler (&java::lang::Throwable::class$);
if (exception[i].handler_type != 0)
handler = check_class_constant (exception[i].handler_type);
push_exception_jump (handler, exception[i].handler_pc);
if (exception[i].handler_type.i != 0)
handler = check_class_constant (exception[i].handler_type.i);
push_exception_jump (handler, exception[i].handler_pc.i);
}
}