summaryrefslogtreecommitdiffstats
path: root/libjava/java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/Class.h9
-rw-r--r--libjava/java/lang/natClassLoader.cc20
2 files changed, 26 insertions, 3 deletions
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index f6c6eec510d..02a97dfcf14 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -14,6 +14,7 @@ details. */
#pragma interface
+#include <stddef.h>
#include <java/lang/Object.h>
#include <java/lang/String.h>
#include <java/net/URL.h>
@@ -24,7 +25,9 @@ details. */
// We declare these here to avoid including gcj/cni.h.
extern "C" void _Jv_InitClass (jclass klass);
-extern "C" void _Jv_RegisterClasses (jclass *classes);
+extern "C" void _Jv_RegisterClasses (const jclass *classes);
+extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes,
+ size_t count);
// This must be predefined with "C" linkage.
extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface,
@@ -310,7 +313,9 @@ private:
friend class java::io::ObjectStreamClass;
friend void _Jv_WaitForState (jclass, int);
- friend void _Jv_RegisterClasses (jclass *classes);
+ friend void _Jv_RegisterClasses (const jclass *classes);
+ friend void _Jv_RegisterClasses_Counted (const jclass *classes,
+ size_t count);
friend void _Jv_RegisterClassHookDefault (jclass klass);
friend void _Jv_RegisterInitiatingLoader (jclass,java::lang::ClassLoader*);
friend void _Jv_UnregisterClass (jclass);
diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc
index e660eae39e6..5a0898a93c4 100644
--- a/libjava/java/lang/natClassLoader.cc
+++ b/libjava/java/lang/natClassLoader.cc
@@ -316,7 +316,7 @@ _Jv_RegisterInitiatingLoader (jclass klass, java::lang::ClassLoader *loader)
// class chain. At all other times, the caller should synchronize on
// Class::class$.
void
-_Jv_RegisterClasses (jclass *classes)
+_Jv_RegisterClasses (const jclass *classes)
{
for (; *classes; ++classes)
{
@@ -331,6 +331,24 @@ _Jv_RegisterClasses (jclass *classes)
}
}
+// This is a version of _Jv_RegisterClasses that takes a count.
+void
+_Jv_RegisterClasses_Counted (const jclass * classes, size_t count)
+{
+ size_t i;
+ for (i = 0; i < count; i++)
+ {
+ jclass klass = classes[i];
+
+ (*_Jv_RegisterClassHook) (klass);
+
+ // registering a compiled class causes
+ // it to be immediately "prepared".
+ if (klass->state == JV_STATE_NOTHING)
+ klass->state = JV_STATE_COMPILED;
+ }
+}
+
void
_Jv_RegisterClassHookDefault (jclass klass)
{
OpenPOWER on IntegriCloud