aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2002-12-05 00:49:30 +0000
committerTom Tromey <tromey@gcc.gnu.org>2002-12-05 00:49:30 +0000
commit76508852a0241db33b2512c0b460cdf06f7e0ce5 (patch)
tree55c5e4e7a3fc1386a525f3b48aea94a0f0b26bef /libjava/java/lang
parent67f1b906114cdfc69b72e7135f34162ec6a67cc0 (diff)
downloadgcc-76508852a0241db33b2512c0b460cdf06f7e0ce5.zip
gcc-76508852a0241db33b2512c0b460cdf06f7e0ce5.tar.gz
gcc-76508852a0241db33b2512c0b460cdf06f7e0ce5.tar.bz2
Makefile.in: Rebuilt.
* Makefile.in: Rebuilt. * Makefile.am (nat_source_files): Added natVMSecurityManager, natResourceBundle. * java/util/ResourceBundle.java (Security): Removed. (getCallingClassLoader): Now native. * java/util/natResourceBundle.cc: New file. * java/lang/natVMSecurityManager.cc: New file. * java/lang/VMSecurityManager.java (getClassContext): Now native. From-SVN: r59840
Diffstat (limited to 'libjava/java/lang')
-rw-r--r--libjava/java/lang/VMSecurityManager.java8
-rw-r--r--libjava/java/lang/natVMSecurityManager.cc54
2 files changed, 56 insertions, 6 deletions
diff --git a/libjava/java/lang/VMSecurityManager.java b/libjava/java/lang/VMSecurityManager.java
index fd16804..f6f0645 100644
--- a/libjava/java/lang/VMSecurityManager.java
+++ b/libjava/java/lang/VMSecurityManager.java
@@ -1,6 +1,6 @@
/*
* java.lang.SecurityManager: part of the Java Class Libraries project.
- * Copyright (C) 1998, 2001 Free Software Foundation
+ * Copyright (C) 1998, 2001, 2002 Free Software Foundation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -43,11 +43,7 @@ class VMSecurityManager
** @return an array containing all the methods on classes
** on the Java execution stack.
**/
- static Class[] getClassContext()
- {
- // FIXME: can't yet implement this for libgcj.
- return new Class[0];
- }
+ static native Class[] getClassContext();
/** Get the current ClassLoader--the one nearest to the
** top of the stack.
diff --git a/libjava/java/lang/natVMSecurityManager.cc b/libjava/java/lang/natVMSecurityManager.cc
new file mode 100644
index 0000000..7b88e8a
--- /dev/null
+++ b/libjava/java/lang/natVMSecurityManager.cc
@@ -0,0 +1,54 @@
+/* Copyright (C) 2002 Free Software Foundation
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+// Written by Tom Tromey <tromey@redhat.com>
+
+#include <config.h>
+
+#include <gcj/cni.h>
+#include <jvm.h>
+#include <java/lang/VMSecurityManager.h>
+#include <java/lang/SecurityManager.h>
+#include <java/lang/ClassLoader.h>
+#include <java/lang/Class.h>
+#include <gnu/gcj/runtime/StackTrace.h>
+
+JArray<jclass> *
+java::lang::VMSecurityManager::getClassContext ()
+{
+ JArray<jclass> *result = NULL;
+ gnu::gcj::runtime::StackTrace *t = new gnu::gcj::runtime::StackTrace();
+ if (t)
+ {
+ int maxlen = t->length();
+
+ int len = 0;
+ while (len < maxlen)
+ {
+ jclass klass = t->classAt(len);
+ if (klass != NULL && klass != &java::lang::VMSecurityManager::class$
+ && klass != &java::lang::SecurityManager::class$)
+ ++len;
+ }
+
+ result =
+ (JArray<jclass> *) _Jv_NewObjectArray (len, &java::lang::Class::class$,
+ NULL);
+
+ len = 0;
+ while (len < maxlen)
+ {
+ jclass klass = t->classAt(len);
+ if (klass != NULL && klass != &java::lang::VMSecurityManager::class$
+ && klass != &java::lang::SecurityManager::class$)
+ elements(result)[len++] = klass;
+ }
+ }
+
+ return result;
+}