diff options
author | Kyle Galloway <kgallowa@redhat.com> | 2007-02-15 15:08:27 +0000 |
---|---|---|
committer | Kyle Galloway <kgallowa@gcc.gnu.org> | 2007-02-15 15:08:27 +0000 |
commit | fe60528edc81e6aaccb5b49b7108853f30ea6278 (patch) | |
tree | d582917d66a2280e29d258af271b3d5500823c60 /libjava/interpret.cc | |
parent | ed765125f2981bc0c2976b5650ba54abc3cb5f2e (diff) | |
download | gcc-fe60528edc81e6aaccb5b49b7108853f30ea6278.zip gcc-fe60528edc81e6aaccb5b49b7108853f30ea6278.tar.gz gcc-fe60528edc81e6aaccb5b49b7108853f30ea6278.tar.bz2 |
defineclass.cc (_Jv_ClassReader::read_one_code_attribute): Added LocalVariableTable attribute handling.
2007-02-15 Kyle Galloway <kgallowa@redhat.com>
* defineclass.cc (_Jv_ClassReader::read_one_code_attribute):
Added LocalVariableTable attribute handling.
(_Jv_ClassReader::pool_Utf8_to_char_arr): New method.
* jvmti.cc (_Jv_JVMTI_GetLocalVariableTable): New method.
* include/java-interp.h: Added local_var_table and
local_var_table_len fields to _Jv_InterpMethod.
(_Jv_InterpMethod::get_local_var_table): New method.
* testsuite/libjava.jvmti/interp/getlocalvartable.java: New
test.
* testsuite/libjava.jvmti/interp/getlocalvartable.jar: New test.
* testsuite/libjava.jvmti/interp/getlocalvartable.out: Output
for new test.
* testsuite/libjava.jvmti/interp/getlocalvartable.h: New test.
* testsuite/libjava.jvmti/interp/natgetlocalvartable.cc: New
test.
From-SVN: r121999
Diffstat (limited to 'libjava/interpret.cc')
-rw-r--r-- | libjava/interpret.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libjava/interpret.cc b/libjava/interpret.cc index 7e7d36d..8a4edac 100644 --- a/libjava/interpret.cc +++ b/libjava/interpret.cc @@ -1414,6 +1414,30 @@ _Jv_InterpMethod::get_line_table (jlong& start, jlong& end, #endif // !DIRECT_THREADED } +int +_Jv_InterpMethod::get_local_var_table (char **name, char **sig, + char **generic_sig, jlong *startloc, + jint *length, jint *slot, + int table_slot) +{ + if (local_var_table == NULL) + return -2; + if (table_slot >= local_var_table_len) + return -1; + else + { + *name = local_var_table[table_slot].name; + *sig = local_var_table[table_slot].descriptor; + *generic_sig = local_var_table[table_slot].descriptor; + + *startloc = static_cast<jlong> + (local_var_table[table_slot].bytecode_start_pc); + *length = static_cast<jint> (local_var_table[table_slot].length); + *slot = static_cast<jint> (local_var_table[table_slot].slot); + } + return local_var_table_len - table_slot -1; +} + pc_t _Jv_InterpMethod::install_break (jlong index) { |