aboutsummaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.lang/InvokeInterface.java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@gcc.gnu.org>2004-04-14 18:45:20 +0100
committerBryce McKinlay <bryce@gcc.gnu.org>2004-04-14 18:45:20 +0100
commitd7afe286b32d866128d542bd8a733c4f21bd2206 (patch)
treeb9dbd14f53ce12873b97ef6caeb33b3335f0e3c5 /libjava/testsuite/libjava.lang/InvokeInterface.java
parentcd2b7af02951e96f1a436d6b5584267e49259930 (diff)
downloadgcc-d7afe286b32d866128d542bd8a733c4f21bd2206.zip
gcc-d7afe286b32d866128d542bd8a733c4f21bd2206.tar.gz
gcc-d7afe286b32d866128d542bd8a733c4f21bd2206.tar.bz2
[multiple changes]
2004-04-14 Andrew Haley <aph@redhat.com> Bryce McKinlay <mckinlay@redhat.com> * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Use _Jv_LookupInterfaceMethodIdx for calls to interfaces. * include/jvm.h (_Jv_CallAnyMethodA): Add new face' arg. * testsuite/libjava.lang/InvokeInterface.java: New file. * testsuite/libjava.lang/InvokeInterface.out: New file. 2004-04-14 Bryce McKinlay <mckinlay@redhat.com> * class.c (get_interface_method_index): New function. Return dispatch index for interface method. (make_method_value): For interface methods, set index field to iface dispatch index, not DECL_VINDEX. * expr.c (build_invokeinterface): Use get_interface_method_index. From-SVN: r80684
Diffstat (limited to 'libjava/testsuite/libjava.lang/InvokeInterface.java')
-rw-r--r--libjava/testsuite/libjava.lang/InvokeInterface.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.lang/InvokeInterface.java b/libjava/testsuite/libjava.lang/InvokeInterface.java
new file mode 100644
index 0000000..6f4dc61
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/InvokeInterface.java
@@ -0,0 +1,55 @@
+import java.lang.reflect.*;
+
+interface one
+{
+ int n(int N);
+}
+
+interface two
+{
+ int nn(int N);
+}
+
+interface three
+{
+ int nnn(int N);
+}
+
+class arse implements one, two
+{
+ public int n(int N) { return N; }
+ public int nn(int N) { return N*2; }
+}
+
+class arsey implements two, one, three
+{
+ public int n(int N) { return N*4; }
+ public int nn(int N) { return N*8; }
+ public int nnn(int N) { return N*16; }
+}
+
+public class InvokeInterface extends arse
+{
+ int f ()
+ {
+ return flunk.nn(1);
+ }
+ static two flunk = new arse();
+ static three flunkey = new arsey();
+ public static void main(String[] s) throws Throwable
+ {
+ Class[] argtypes = {Integer.TYPE};
+ Method m = two.class.getMethod("nn", argtypes);
+ Object[] args = {new Integer(1)};
+ System.out.println(flunk.nn(1));
+ System.out.println(m.invoke(new arse(), args));
+ m = arse.class.getMethod("nn", argtypes);
+ System.out.println(m.invoke(new arse(), args));
+ m = two.class.getMethod("nn", argtypes);
+ System.out.println(m.invoke(new arsey(), args));
+ m = three.class.getMethod("nnn", argtypes);
+ System.out.println(m.invoke(new arsey(), args));
+ m = arsey.class.getMethod("nnn", argtypes);
+ System.out.println(m.invoke(new arsey(), args));
+ }
+}