From 91c6dda6c7acfeb8d9896557da02316109b0d05c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 9 Dec 2001 00:17:07 +0000 Subject: Makefile.in: Rebuilt. * Makefile.in: Rebuilt. * Makefile.am (java/lang/reflect/Method.h): ObjectInputStream now a friend. * java/lang/natClass.cc (getSignature): Only look at elements of non-null parameters. (getPrivateMethod): Removed old FIXME comment. * java/io/natObjectInputStream.cc (allocateObject): Removed old FIXME comment. (callConstructor): Simply use `NULL' for value of parameters. (ObjectClass): Removed. (ClassClass): Likewise. * java/io/ObjectInputStream.java (readObject): Fixed typo. From-SVN: r47800 --- libjava/java/io/natObjectInputStream.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'libjava/java/io/natObjectInputStream.cc') diff --git a/libjava/java/io/natObjectInputStream.cc b/libjava/java/io/natObjectInputStream.cc index 856f6e2..8240144 100644 --- a/libjava/java/io/natObjectInputStream.cc +++ b/libjava/java/io/natObjectInputStream.cc @@ -1,6 +1,6 @@ // natObjectInputStream.cc - Native part of ObjectInputStream class. -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation This ObjectInputStream is part of libgcj. @@ -38,7 +38,6 @@ java::io::ObjectInputStream::allocateObject (jclass klass) obj = NULL; else { - // FIXME: will this work for String? obj = JvAllocObject (klass); } } @@ -51,19 +50,24 @@ java::io::ObjectInputStream::allocateObject (jclass klass) } -#define ObjectClass java::lang::Object::class$ -#define ClassClass java::lang::Class::class$ - void java::io::ObjectInputStream::callConstructor (jclass klass, jobject obj) { jstring init_name = JvNewStringLatin1 (""); + // This is a bit inefficient, and a bit of a hack, since we don't + // actually use the Method and since what is returned isn't + // technically a Method. We can't use Method.invoke as it looks up + // the declared method. JArray *arg_types - = (JArray *) JvNewObjectArray (0, &ClassClass, NULL); - JArray *args - = (JArray *) JvNewObjectArray (0, &ObjectClass, NULL); - java::lang::reflect::Method *m = klass->getPrivateMethod (init_name, arg_types); - m->invoke (obj, args); + = (JArray *) JvNewObjectArray (0, &java::lang::Class::class$, + NULL); + java::lang::reflect::Method *m = klass->getPrivateMethod (init_name, + arg_types); + // We lie about this being a constructor. If we put `true' here + // then _Jv_CallAnyMethodA would try to allocate the object for us. + jmethodID meth = (jmethodID) ((char *) (klass->methods) + + m->offset); + _Jv_CallAnyMethodA (obj, JvPrimClass (void), meth, false, arg_types, NULL); } java::lang::reflect::Field * -- cgit v1.1