diff options
author | Tom Tromey <tromey@gcc.gnu.org> | 2000-05-19 17:55:34 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2000-05-19 17:55:34 +0000 |
commit | 6c80c45e3010bfe992b41dd8800d2c4b65e0d5ef (patch) | |
tree | 88cf0d32aea197ea8e8198e1206b04c820308615 /libjava/java/io/natObjectInputStream.cc | |
parent | 021c89ed68c151c45021fccf1bb5338ee817314c (diff) | |
download | gcc-6c80c45e3010bfe992b41dd8800d2c4b65e0d5ef.zip gcc-6c80c45e3010bfe992b41dd8800d2c4b65e0d5ef.tar.gz gcc-6c80c45e3010bfe992b41dd8800d2c4b65e0d5ef.tar.bz2 |
Jumbo patch:
* Imported beans and serialization
* Updated IA-64 port
* Miscellaneous bug fixes
From-SVN: r34028
Diffstat (limited to 'libjava/java/io/natObjectInputStream.cc')
-rw-r--r-- | libjava/java/io/natObjectInputStream.cc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/libjava/java/io/natObjectInputStream.cc b/libjava/java/io/natObjectInputStream.cc new file mode 100644 index 0000000..b7a8dcb --- /dev/null +++ b/libjava/java/io/natObjectInputStream.cc @@ -0,0 +1,78 @@ +// natObjectInputStream.cc - Native part of ObjectInputStream class. + +/* Copyright (C) 1998, 1999 Free Software Foundation + + This ObjectInputStream is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the ObjectInputStream "LIBGCJ_LICENSE" for +details. */ + +#include <config.h> + +#include <gcj/cni.h> +#include <jvm.h> + +#include <java/io/ObjectInputStream$GetField.h> +#include <java/io/ObjectInputStream.h> +#include <java/io/IOException.h> +#include <java/lang/Class.h> +#include <java/lang/reflect/Modifier.h> +#include <java/lang/reflect/Method.h> + +jobject +java::io::ObjectInputStream::allocateObject (jclass klass) +{ + jobject obj = NULL; + using namespace java::lang::reflect; + + try + { + JvAssert (klass && ! klass->isArray ()); + if (klass->isInterface() || Modifier::isAbstract(klass->getModifiers())) + obj = NULL; + else + { + // FIXME: will this work for String? + obj = JvAllocObject (klass); + } + } + catch (jthrowable t) + { + return NULL; + } + + return obj; +} + + +#define ObjectClass _CL_Q34java4lang6Object +extern java::lang::Class ObjectClass; +#define ClassClass _CL_Q34java4lang5Class +extern java::lang::Class ClassClass; + +void +java::io::ObjectInputStream::callConstructor (jclass klass, jobject obj) +{ + jstring init_name = JvNewStringLatin1 ("<init>"); + JArray<jclass> *arg_types + = (JArray<jclass> *) JvNewObjectArray (0, &ClassClass, NULL); + JArray<jobject> *args + = (JArray<jobject> *) JvNewObjectArray (0, &ObjectClass, NULL); + java::lang::reflect::Method *m = klass->getPrivateMethod (init_name, arg_types); + m->invoke (obj, args); +} + +java::lang::reflect::Field * +java::io::ObjectInputStream::getField (jclass klass, jstring name) +{ + return klass->getPrivateField (name); +} + +java::lang::reflect::Method * +java::io::ObjectInputStream::getMethod (jclass klass, jstring name, + JArray<jclass> *arg_types) +{ + return klass->getPrivateMethod (name, arg_types); +} + |