summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-01-08 00:25:53 +0000
committerRich Hickey <richhickey@gmail.com>2009-01-08 00:25:53 +0000
commit51ed068c679a4a65a2aa3552f8d088a1b787b08b (patch)
tree2ff9944c9355c4751dcfe351a16d8e21973d3759 /src/jvm/clojure
parentf8eea33039908560cb6fc564aea8341af4b0d7c7 (diff)
move to RT.classForName in import
don't gen stubs for package-private methods in gen-class and proxy (causes security violation in applets) Made root classloader create-on-demand, so no DynamicClassLoader unless dynamic code (eval/load, non-AOT proxy) AOT compiled applets should work
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/RT.java21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 2c5faad7..4954028c 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -15,9 +15,6 @@ package clojure.lang;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.Callable;
import java.util.*;
-import java.util.zip.ZipEntry;
-import java.util.jar.JarFile;
-import java.util.jar.JarEntry;
import java.util.regex.Matcher;
import java.io.*;
import java.lang.reflect.Array;
@@ -26,7 +23,6 @@ import java.math.BigInteger;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.net.URL;
-import java.net.URLConnection;
import java.net.JarURLConnection;
import java.nio.charset.Charset;
@@ -240,11 +236,11 @@ static public final Comparator DEFAULT_COMPARATOR = new Comparator(){
};
static AtomicInteger id = new AtomicInteger(1);
-static final public DynamicClassLoader ROOT_CLASSLOADER = new DynamicClassLoader();
+private static DynamicClassLoader ROOT_CLASSLOADER = null;
static public void addURL(Object url) throws Exception{
URL u = (url instanceof String) ? (new URL((String) url)) : (URL) url;
- ROOT_CLASSLOADER.addURL(u);
+ getRootClassLoader().addURL(u);
}
static
@@ -1492,6 +1488,7 @@ static public Object[] setValues(Object... vals){
static public ClassLoader makeClassLoader(){
return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction(){
public Object run(){
+ getRootClassLoader();
return new DynamicClassLoader(baseLoader());
}
});
@@ -1500,12 +1497,14 @@ static public ClassLoader makeClassLoader(){
static public ClassLoader baseLoader(){
if(booleanCast(USE_CONTEXT_CLASSLOADER.get()))
return Thread.currentThread().getContextClassLoader();
- return ROOT_CLASSLOADER;
+ else if(ROOT_CLASSLOADER != null)
+ return ROOT_CLASSLOADER;
+ return Compiler.class.getClassLoader();
}
static public Class classForName(String name) throws ClassNotFoundException{
- return Class.forName(name, false, baseLoader());
+ return Class.forName(name, true, baseLoader());
}
static public Class loadClassForName(String name) throws ClassNotFoundException{
@@ -1702,4 +1701,10 @@ static final public IStream EMPTY_STREAM = new IStream(){
return eos();
}
};
+
+synchronized public static DynamicClassLoader getRootClassLoader() {
+ if(ROOT_CLASSLOADER == null)
+ ROOT_CLASSLOADER = new DynamicClassLoader();
+ return ROOT_CLASSLOADER;
+ }
}