diff options
author | Tom Tromey <tromey@redhat.com> | 2006-04-24 21:28:36 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2006-04-24 21:28:36 +0000 |
commit | 0623a8c0c2b66e8a74eb16365db1c271e6ccc3b2 (patch) | |
tree | b428bcb705f8cde0041de4120ed15be9c6571606 /libjava/java | |
parent | 9fff64328d6e03611eb18cae23704cebf32d2c40 (diff) | |
download | gcc-0623a8c0c2b66e8a74eb16365db1c271e6ccc3b2.zip gcc-0623a8c0c2b66e8a74eb16365db1c271e6ccc3b2.tar.gz gcc-0623a8c0c2b66e8a74eb16365db1c271e6ccc3b2.tar.bz2 |
* java/lang/natClass.cc (_Jv_getInterfaceMethod): Skip <clinit>.
From-SVN: r113229
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/lang/natClass.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 38a9aff..d888350 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -1182,9 +1182,14 @@ _Jv_getInterfaceMethod (jclass search_class, jclass &found_class, int &index, if (!klass->isInterface ()) return false; - int i = klass->method_count; - while (--i >= 0) + int max = klass->method_count; + int offset = 0; + for (int i = 0; i < max; ++i) { + // Skip <clinit> here, as it will not be in the IDT. + if (klass->methods[i].name->first() == '<') + continue; + if (_Jv_equalUtf8Consts (klass->methods[i].name, utf_name) && _Jv_equalUtf8Consts (klass->methods[i].signature, utf_sig)) { @@ -1197,9 +1202,11 @@ _Jv_getInterfaceMethod (jclass search_class, jclass &found_class, int &index, found_class = klass; // Interface method indexes count from 1. - index = i+1; + index = offset + 1; return true; } + + ++offset; } } @@ -1211,8 +1218,8 @@ _Jv_getInterfaceMethod (jclass search_class, jclass &found_class, int &index, { using namespace java::lang::reflect; bool found = _Jv_getInterfaceMethod (search_class->interfaces[i], - found_class, index, - utf_name, utf_sig); + found_class, index, + utf_name, utf_sig); if (found) return true; } |