aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io/natObjectInputStream.cc
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2004-06-21 16:52:14 +0000
committerAndrew Haley <aph@gcc.gnu.org>2004-06-21 16:52:14 +0000
commitdeb3d52fec87690fed1a14aa4f8666a59f0fcc14 (patch)
tree3a45653fc7061bc610f982b563c34279fc5ae046 /libjava/java/io/natObjectInputStream.cc
parent413ed876c51b0b85661e938b1914dcd3821066f7 (diff)
downloadgcc-deb3d52fec87690fed1a14aa4f8666a59f0fcc14.zip
gcc-deb3d52fec87690fed1a14aa4f8666a59f0fcc14.tar.gz
gcc-deb3d52fec87690fed1a14aa4f8666a59f0fcc14.tar.bz2
ObjectOutputStream.java: Add DEBUG statements everywhere.
2004-06-21 Andrew Haley <aph@redhat.com> * java/io/ObjectOutputStream.java: Add DEBUG statements everywhere. (dumpElementln): New method. (depth): New field. * java/io/ObjectInputStream.java (currentClassLoader): Make native. (callersClassLoader): New field. (depth): New field. (readObject): ENDBLOCKDATA is generated if the class has a write method, not if it has a read method. (readObject): Save and restore this.currentObject and this.currentObjectStreamClass around calls to callReadMethod(). * java/io/natObjectInputStream.cc (getCallersClassLoader): New method. From-SVN: r83440
Diffstat (limited to 'libjava/java/io/natObjectInputStream.cc')
-rw-r--r--libjava/java/io/natObjectInputStream.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/libjava/java/io/natObjectInputStream.cc b/libjava/java/io/natObjectInputStream.cc
index bb3796f..9da4910 100644
--- a/libjava/java/io/natObjectInputStream.cc
+++ b/libjava/java/io/natObjectInputStream.cc
@@ -19,6 +19,8 @@ details. */
#include <java/lang/Class.h>
#include <java/lang/reflect/Modifier.h>
#include <java/lang/reflect/Method.h>
+#include <java/lang/ArrayIndexOutOfBoundsException.h>
+#include <java/lang/SecurityManager.h>
#ifdef DEBUG
#include <java/lang/System.h>
@@ -69,3 +71,33 @@ java::io::ObjectInputStream::callConstructor (jclass klass, jobject obj)
+ m->offset);
_Jv_CallAnyMethodA (obj, JvPrimClass (void), meth, false, arg_types, NULL);
}
+
+java::lang::ClassLoader*
+java::io::ObjectInputStream::getCallersClassLoader ()
+{
+ java::lang::ClassLoader *loader = NULL;
+ gnu::gcj::runtime::StackTrace *t
+ = new gnu::gcj::runtime::StackTrace(4);
+ java::lang::Class *klass = NULL;
+ try
+ {
+ for (int i = 2; !klass; i++)
+ {
+ klass = t->classAt (i);
+ }
+ loader = klass->getClassLoaderInternal();
+ }
+ catch (::java::lang::ArrayIndexOutOfBoundsException *e)
+ {
+ // FIXME: RuntimeError
+ }
+
+ return loader;
+}
+
+java::lang::ClassLoader*
+java::io::ObjectInputStream::currentClassLoader (::java::lang::SecurityManager *sm)
+{
+ return sm->currentClassLoader ();
+}
+