diff options
author | Keith Seitz <keiths@redhat.com> | 2006-10-10 20:15:51 +0000 |
---|---|---|
committer | Keith Seitz <kseitz@gcc.gnu.org> | 2006-10-10 20:15:51 +0000 |
commit | 05ee9ca08fa14577c842dbf0bece1b0d4e56eb00 (patch) | |
tree | 128c26f6b83c22bf5dbed4b27189a9b690415438 /libjava | |
parent | 4e34ede292add9a4518f78848bdf76f9b4944f6f (diff) | |
download | gcc-05ee9ca08fa14577c842dbf0bece1b0d4e56eb00.zip gcc-05ee9ca08fa14577c842dbf0bece1b0d4e56eb00.tar.gz gcc-05ee9ca08fa14577c842dbf0bece1b0d4e56eb00.tar.bz2 |
java-interp.h (_Jv_InterpMethod::get_insn): Declare.
* include/java-interp.h (_Jv_InterpMethod::get_insn): Declare.
(_Jv_InterpMethod::set_insn): Declare.
* interpret.cc (_Jv_InterpMethod::get_insn): New method.
(_Jv_InterpMethod::get_insn): New method.
From-SVN: r117614
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/include/java-interp.h | 7 | ||||
-rw-r--r-- | libjava/interpret.cc | 40 |
3 files changed, 54 insertions, 0 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b1853f4..e6933f3 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2006-10-10 Keith Seitz <keiths@redhat.com> + + * include/java-interp.h (_Jv_InterpMethod::get_insn): Declare. + (_Jv_InterpMethod::set_insn): Declare. + * interpret.cc (_Jv_InterpMethod::get_insn): New method. + (_Jv_InterpMethod::get_insn): New method. + 2006-10-10 Tom Tromey <tromey@redhat.com> * prims.cc (_Jv_PrependVersionedLibdir): Use diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h index 133fd19..276a887 100644 --- a/libjava/include/java-interp.h +++ b/libjava/include/java-interp.h @@ -206,6 +206,13 @@ class _Jv_InterpMethod : public _Jv_MethodBase void get_line_table (jlong& start, jlong& end, jintArray& line_numbers, jlongArray& code_indices); + // Gets the instruction at the given index + pc_t get_insn (jlong index); + + /* Writes the given instruction at the given code index. Returns + the insn or NULL if index is invalid. */ + pc_t set_insn (jlong index, pc_t insn); + #ifdef DIRECT_THREADED friend void _Jv_CompileMethod (_Jv_InterpMethod*); #endif diff --git a/libjava/interpret.cc b/libjava/interpret.cc index 1c4e21e..b5c8387 100644 --- a/libjava/interpret.cc +++ b/libjava/interpret.cc @@ -1384,6 +1384,46 @@ _Jv_InterpMethod::get_line_table (jlong& start, jlong& end, #endif // !DIRECT_THREADED } +pc_t +_Jv_InterpMethod::get_insn (jlong index) +{ + pc_t code; + +#ifdef DIRECT_THREADED + if (index >= number_insn_slots || index < 0) + return NULL; + + code = prepared; +#else // !DIRECT_THREADED + if (index >= code_length || index < 0) + return NULL; + + code = reinterpret_cast<pc_t> (bytecode ()); +#endif // !DIRECT_THREADED + + return &code[index]; +} + +pc_t +_Jv_InterpMethod::set_insn (jlong index, pc_t insn) +{ +#ifdef DIRECT_THREADED + if (index >= number_insn_slots || index < 0) + return NULL; + + pc_t code = prepared; + code[index].insn = insn->insn; +#else // !DIRECT_THREADED + if (index >= code_length || index < 0) + return NULL; + + pc_t code = reinterpret_cast<pc_t> (bytecode ()); + code[index] = *insn; +#endif // !DIRECT_THREADED + + return &code[index]; +} + void * _Jv_JNIMethod::ncode () { |