aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-04-24 21:28:36 +0000
committerTom Tromey <tromey@gcc.gnu.org>2006-04-24 21:28:36 +0000
commit0623a8c0c2b66e8a74eb16365db1c271e6ccc3b2 (patch)
treeb428bcb705f8cde0041de4120ed15be9c6571606 /libjava/java
parent9fff64328d6e03611eb18cae23704cebf32d2c40 (diff)
downloadgcc-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.cc17
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;
}