Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / libjava / java / io / natObjectInputStream.cc
blob2d1a55665d1e1b6098a9bd61d68f844a40e95bb1
1 // natObjectInputStream.cc - Native part of ObjectInputStream class.
3 /* Copyright (C) 1998, 1999, 2000, 2001, 2005 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
9 details. */
11 #include <config.h>
13 #include <gcj/cni.h>
14 #include <jvm.h>
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>
27 #include <java-stack.h>
29 #ifdef DEBUG
30 #include <java/lang/System.h>
31 #include <java/io/PrintStream.h>
32 #endif
34 jobject
35 java::io::ObjectInputStream::allocateObject (jclass klass, jclass,
36 ::java::lang::reflect::Constructor *ctr)
38 jobject obj = NULL;
39 using namespace java::lang::reflect;
41 try
43 JvAssert (klass && ! klass->isArray ());
44 if (klass->isInterface() || Modifier::isAbstract(klass->getModifiers()))
45 obj = NULL;
46 else
48 obj = _Jv_AllocObject (klass);
51 catch (jthrowable t)
53 return NULL;
56 jmethodID meth = _Jv_FromReflectedConstructor (ctr);
58 // This is a bit inefficient, and a bit of a hack, since we don't
59 // actually use the Method and since what is returned isn't
60 // technically a Method. We can't use Method.invoke as it looks up
61 // the declared method.
62 JArray<jclass> *arg_types
63 = (JArray<jclass> *) JvNewObjectArray (0, &java::lang::Class::class$,
64 NULL);
66 // We lie about this being a constructor. If we put `true' here
67 // then _Jv_CallAnyMethodA would try to allocate the object for us.
68 _Jv_CallAnyMethodA (obj, JvPrimClass (void), meth, false, arg_types, NULL);
70 return obj;
73 java::lang::ClassLoader *
74 java::io::ObjectInputStream::currentLoader ()
76 jclass caller = _Jv_StackTrace::GetCallingClass (&ObjectInputStream::class$);
77 if (caller)
78 return caller->getClassLoaderInternal();
79 return NULL;