mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 23:25:24 +02:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user