1 // natObjectInputStream.cc - Native part of ObjectInputStream class.
3 /* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
5 This ObjectInputStream is part of libgcj.
7 This software is copyrighted work licensed under the terms of the
8 Libgcj License. Please consult the ObjectInputStream "LIBGCJ_LICENSE" for
15 #include <gcj/method.h>
17 #include <java/io/ObjectInputStream$GetField.h>
18 #include <java/io/ObjectInputStream.h>
19 #include <java/io/IOException.h>
20 #include <java/lang/Class.h>
21 #include <java/lang/reflect/Modifier.h>
22 #include <java/lang/reflect/Method.h>
23 #include <java/lang/ArrayIndexOutOfBoundsException.h>
24 #include <java/lang/SecurityManager.h>
25 #include <java/lang/reflect/Constructor.h>
26 #include <java/lang/reflect/Method.h>
29 #include <java/lang/System.h>
30 #include <java/io/PrintStream.h>
34 java::io::ObjectInputStream::allocateObject (jclass klass
, jclass
,
35 ::java::lang::reflect::Constructor
*ctr
)
38 using namespace java::lang::reflect
;
42 JvAssert (klass
&& ! klass
->isArray ());
43 if (klass
->isInterface() || Modifier::isAbstract(klass
->getModifiers()))
47 obj
= _Jv_AllocObject (klass
);
55 jmethodID meth
= _Jv_FromReflectedConstructor (ctr
);
57 // This is a bit inefficient, and a bit of a hack, since we don't
58 // actually use the Method and since what is returned isn't
59 // technically a Method. We can't use Method.invoke as it looks up
60 // the declared method.
61 JArray
<jclass
> *arg_types
62 = (JArray
<jclass
> *) JvNewObjectArray (0, &java::lang::Class::class$
,
65 // We lie about this being a constructor. If we put `true' here
66 // then _Jv_CallAnyMethodA would try to allocate the object for us.
67 _Jv_CallAnyMethodA (obj
, JvPrimClass (void), meth
, false, arg_types
, NULL
);
72 java::lang::ClassLoader
*
73 java::io::ObjectInputStream::currentClassLoader (::java::lang::SecurityManager
*sm
)
75 return sm
->currentClassLoader ();