summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-01-24 20:22:55 +0000
committerRich Hickey <richhickey@gmail.com>2008-01-24 20:22:55 +0000
commit36868a7734f15c51eb1831aa9d72a14544496987 (patch)
tree25dbfe073d2119a4e325478c1c25ae3a762f0115 /src
parentbba289e42620408d912de604cbd75b78de74b628 (diff)
interim checkin - do not use
Diffstat (limited to 'src')
-rw-r--r--src/boot.clj19
-rw-r--r--src/jvm/clojure/lang/Compiler.java184
-rw-r--r--src/jvm/clojure/lang/Namespace.java48
-rw-r--r--src/jvm/clojure/lang/RT.java85
-rw-r--r--src/jvm/clojure/lang/Reflector.java13
-rw-r--r--src/jvm/clojure/lang/Repl.java5
6 files changed, 210 insertions, 144 deletions
diff --git a/src/boot.clj b/src/boot.clj
index 9f4b89e7..06fa0fc9 100644
--- a/src/boot.clj
+++ b/src/boot.clj
@@ -91,7 +91,7 @@
(recur (. sb (append (str (first more)))) (rest more))
(str sb)))))
-(defn sym
+(defn symbol
([name] (. clojure.lang.Symbol (intern name)))
([ns name] (. clojure.lang.Symbol (intern ns name))))
@@ -686,11 +686,11 @@
(defn import [& import-lists]
(when import-lists
- (let [#^clojure.lang.Var imps *ns-imports*
+ (let [#^clojure.lang.Namespace ns *current-namespace*
pkg (ffirst import-lists)
classes (rfirst import-lists)]
(doseq c classes
- (. imps (bindRoot (assoc (. imps (get)) c (strcat pkg "." c))))))
+ (. ns (importClass c (. Class (forName (strcat pkg "." c)))))) )
(apply thisfn (rest import-lists))))
(defn unimport [& names]
@@ -704,9 +704,9 @@
ns (first rlist)
names (rest rlist)]
(doseq name names
- (when (. clojure.lang.Var (find (sym (str *current-namespace*) (str name))))
+ (when (. clojure.lang.Var (find (symbol(str *current-namespace*) (str name))))
(throw (new Exception (strcat "Name conflict: " name " already exists in this namespace"))))
- (let [varsym (sym (str ns) (str name))
+ (let [varsym (symbol (str ns) (str name))
var (. clojure.lang.Var (find varsym))
#^clojure.lang.Var rvar ((. refers (get)) name)]
(if var
@@ -721,8 +721,8 @@
(doseq name names
(. refers (bindRoot (dissoc (. refers (get)) name))))))
-(defn unintern [varsym]
- (. clojure.lang.Var (unintern varsym)))
+;(defn unintern [varsym]
+; (. clojure.lang.Var (unintern varsym)))
(defn into-array [aseq]
(. clojure.lang.RT (seqToTypedArray (seq aseq))))
@@ -1013,7 +1013,7 @@
scan touch
key val
line-seq sort sort-by comparator
- rseq sym keyword name namespace locking .. ->
+ rseq symbol keyword name namespace locking .. ->
defmulti defmethod remove-method
binding find-var
ref deref commute alter set ensure sync !
@@ -1025,7 +1025,8 @@
zipmap
cycle split-at split-with repeat replicate iterate range
doseq dotimes into
- eval import unimport refer unrefer in-namespace unintern
+ eval import unimport refer unrefer in-namespace
+ ;unintern
into-array array
make-proxy implement
pr prn print println newline *out* *current-namespace* *print-meta* *print-readably*
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 9fd9d46b..89d6e1a5 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -218,18 +218,29 @@ static Symbol resolveSymbol(Symbol sym){
//already qualified or classname?
if(sym.ns != null || sym.name.indexOf('.') > 0)
return sym;
- IPersistentMap imports = (IPersistentMap) ((Var) RT.NS_IMPORTS.get()).get();
- //imported class?
- String className = (String) imports.valAt(sym);
- if(className != null)
- return Symbol.intern(null, className);
- //refers?
- IPersistentMap refers = (IPersistentMap) ((Var) RT.NS_REFERS.get()).get();
- Var var = (Var) refers.valAt(sym);
- if(var != null)
- return var.sym;
+ Object o = currentNS().getMapping(sym);
+ if(o == null)
+ return Symbol.intern(currentNS().name.name, sym.name);
+ else if(o instanceof Class)
+ return Symbol.intern(null, ((Class)o).getName());
+ else if(o instanceof Var)
+ {
+ Var v = (Var) o;
+ return Symbol.create(v.ns.name.name, v.sym.name);
+ }
+ return null;
+
+// IPersistentMap imports = (IPersistentMap) ((Var) RT.NS_IMPORTS.get()).get();
+// //imported class?
+// String className = (String) imports.valAt(sym);
+// if(className != null)
+// return Symbol.intern(null, className);
+// //refers?
+// IPersistentMap refers = (IPersistentMap) ((Var) RT.NS_REFERS.get()).get();
+// Var var = (Var) refers.valAt(sym);
+// if(var != null)
+// return var.sym;
- return Symbol.intern(currentNS().name.name, sym.name);
}
static class DefExpr implements Expr{
@@ -378,7 +389,7 @@ static class VarExpr implements Expr, AssignableExpr{
return tag != null;
}
- public Class getJavaClass() throws ClassNotFoundException{
+ public Class getJavaClass() throws Exception{
return HostExpr.tagToClass(tag);
}
@@ -656,17 +667,17 @@ static abstract class HostExpr implements Expr{
//determine static or instance
//static target must be symbol, either fully.qualified.Classname or Classname that has been imported
int line = (Integer) LINE.get();
- String className = maybeClassName(RT.second(form), false);
+ Class c = maybeClass(RT.second(form), false);
//at this point className will be non-null if static
Expr instance = null;
- if(className == null)
+ if(c == null)
instance = analyze(context == C.EVAL ? context : C.EXPRESSION, RT.second(form));
if(RT.third(form) instanceof Symbol) //field
{
Symbol sym = (Symbol) RT.third(form);
- if(className != null)
- return new StaticFieldExpr(line, className, sym.name);
+ if(c != null)
+ return new StaticFieldExpr(line, c, sym.name);
else
return new InstanceFieldExpr(line, instance, sym.name);
}
@@ -676,8 +687,8 @@ static abstract class HostExpr implements Expr{
PersistentVector args = PersistentVector.EMPTY;
for(ISeq s = RT.rest(RT.third(form)); s != null; s = s.rest())
args = args.cons(analyze(context == C.EVAL ? context : C.EXPRESSION, s.first()));
- if(className != null)
- return new StaticMethodExpr(line, className, sym.name, args);
+ if(c != null)
+ return new StaticMethodExpr(line, c, sym.name, args);
else
return new InstanceMethodExpr(line, instance, sym.name, args);
}
@@ -686,6 +697,28 @@ static abstract class HostExpr implements Expr{
}
}
+ private static Class maybeClass(Object form, boolean stringOk) throws Exception{
+ Class c = null;
+ if(form instanceof Symbol)
+ {
+ Symbol sym = (Symbol) form;
+ if(sym.ns == null) //if ns-qualified can't be classname
+ {
+ if(sym.name.indexOf('.') > 0 || sym.name.charAt(0) == '[')
+ c = Class.forName(sym.name);
+ else
+ {
+ Object o = currentNS().getMapping(sym);
+ if(o instanceof Class)
+ c = (Class) o;
+ }
+ }
+ }
+ else if(stringOk && form instanceof String)
+ c = Class.forName((String) form);
+ return c;
+ }
+/*
private static String maybeClassName(Object form, boolean stringOk){
String className = null;
if(form instanceof Symbol)
@@ -706,11 +739,11 @@ static abstract class HostExpr implements Expr{
className = (String) form;
return className;
}
-
- static Class tagToClass(Symbol tag) throws ClassNotFoundException{
- String className = maybeClassName(tag, true);
- if(className != null)
- return Class.forName(className);
+*/
+ static Class tagToClass(Symbol tag) throws Exception{
+ Class c = maybeClass(tag, true);
+ if(c != null)
+ return c;
throw new IllegalArgumentException("Unable to resolve classname: " + tag);
}
}
@@ -803,7 +836,7 @@ static class InstanceFieldExpr extends FieldExpr implements AssignableExpr{
}
static class StaticFieldExpr extends FieldExpr implements AssignableExpr{
- final String className;
+ //final String className;
final String fieldName;
final Class c;
final java.lang.reflect.Field field;
@@ -811,16 +844,17 @@ static class StaticFieldExpr extends FieldExpr implements AssignableExpr{
final static Method setStaticFieldMethod = Method.getMethod("Object setStaticField(String,String,Object)");
final int line;
- public StaticFieldExpr(int line, String className, String fieldName) throws Exception{
- this.className = className;
+ public StaticFieldExpr(int line, Class c, String fieldName) throws Exception{
+ //this.className = className;
this.fieldName = fieldName;
this.line = line;
- c = Class.forName(className);
+ //c = Class.forName(className);
+ this.c = c;
field = c.getField(fieldName);
}
public Object eval() throws Exception{
- return Reflector.getStaticField(className, fieldName);
+ return Reflector.getStaticField(c, fieldName);
}
public void emit(C context, FnExpr fn, GeneratorAdapter gen){
@@ -847,7 +881,7 @@ static class StaticFieldExpr extends FieldExpr implements AssignableExpr{
}
public Object evalAssign(Expr val) throws Exception{
- return Reflector.setStaticField(className, fieldName, val.eval());
+ return Reflector.setStaticField(c, fieldName, val.eval());
}
public void emitAssign(C context, FnExpr fn, GeneratorAdapter gen,
@@ -987,7 +1021,8 @@ static class InstanceMethodExpr extends MethodExpr{
static class StaticMethodExpr extends MethodExpr{
- final String className;
+ //final String className;
+ final Class c;
final String methodName;
final IPersistentVector args;
final int line;
@@ -996,14 +1031,14 @@ static class StaticMethodExpr extends MethodExpr{
Method.getMethod("Object invokeStaticMethod(String,String,Object[])");
- public StaticMethodExpr(int line, String className, String methodName, IPersistentVector args)
+ public StaticMethodExpr(int line, Class c, String methodName, IPersistentVector args)
throws Exception{
- this.className = className;
+ this.c = c;
this.methodName = methodName;
this.args = args;
this.line = line;
- List methods = Reflector.getMethods(Class.forName(className), args.count(), methodName, true);
+ List methods = Reflector.getMethods(c, args.count(), methodName, true);
if(methods.isEmpty())
throw new IllegalArgumentException("No matching method: " + methodName);
@@ -1032,7 +1067,7 @@ static class StaticMethodExpr extends MethodExpr{
ms.add(method);
return Reflector.invokeMatchingMethod(methodName, ms, null, argvals);
}
- return Reflector.invokeStaticMethod(className, methodName, argvals);
+ return Reflector.invokeStaticMethod(c, methodName, argvals);
}
public void emit(C context, FnExpr fn, GeneratorAdapter gen){
@@ -1040,14 +1075,15 @@ static class StaticMethodExpr extends MethodExpr{
if(method != null)
{
MethodExpr.emitTypedArgs(fn, gen, method.getParameterTypes(), args);
- Type type = Type.getObjectType(className.replace('.', '/'));
+ //Type type = Type.getObjectType(className.replace('.', '/'));
+ Type type = Type.getType(c);
Method m = new Method(methodName, Type.getReturnType(method), Type.getArgumentTypes(method));
gen.invokeStatic(type, m);
HostExpr.emitBoxReturn(fn, gen, method.getReturnType());
}
else
{
- gen.push(className);
+ gen.push(c.getName());
gen.push(methodName);
emitArgsAsArray(args, fn, gen);
gen.invokeStatic(REFLECTOR_TYPE, invokeStaticMethodMethod);
@@ -1366,15 +1402,16 @@ static class TryExpr implements Expr{
final PersistentVector catchExprs;
static class CatchClause{
- final String className;
+ //final String className;
+ final Class c;
final LocalBinding lb;
final Expr handler;
Label label;
Label endLabel;
- public CatchClause(String className, LocalBinding lb, Expr handler){
- this.className = className;
+ public CatchClause(Class c, LocalBinding lb, Expr handler){
+ this.c = c;
this.lb = lb;
this.handler = handler;
}
@@ -1400,7 +1437,7 @@ static class TryExpr implements Expr{
CatchClause clause = (CatchClause) catchExprs.nth(i);
clause.label = gen.newLabel();
clause.endLabel = gen.newLabel();
- gen.visitTryCatchBlock(startTry, endTry, clause.label, clause.className.replace('.', '/'));
+ gen.visitTryCatchBlock(startTry, endTry, clause.label, clause.c.getName().replace('.', '/'));
}
if(finallyExpr != null)
gen.visitTryCatchBlock(startTry, endTry, finallyLabel, null);
@@ -1480,8 +1517,8 @@ static class TryExpr implements Expr{
{
if(RT.equal(op, CATCH))
{
- String className = HostExpr.maybeClassName(RT.second(f), false);
- if(className == null)
+ Class c = HostExpr.maybeClass(RT.second(f), false);
+ if(c == null)
throw new IllegalArgumentException("Unable to resolve classname: " + RT.second(f));
if(!(RT.third(f) instanceof Symbol))
throw new IllegalArgumentException(
@@ -1497,7 +1534,7 @@ static class TryExpr implements Expr{
Var.pushThreadBindings(dynamicBindings);
LocalBinding lb = registerLocal(sym, null, null);
Expr handler = (new BodyExpr.Parser()).parse(context, RT.rest(RT.rest(RT.rest(f))));
- catches = catches.cons(new CatchClause(className, lb, handler));
+ catches = catches.cons(new CatchClause(c, lb, handler));
}
finally
{
@@ -1604,22 +1641,22 @@ static class ThrowExpr extends UntypedExpr{
}
static class ClassExpr implements Expr{
- final String className;
+ final Class c;
final static Method forNameMethod = Method.getMethod("Class forName(String)");
- public ClassExpr(String className){
- this.className = className;
+ public ClassExpr(Class c){
+ this.c = c;
}
public Object eval() throws Exception{
- return Class.forName(className);
+ return c;
}
public void emit(C context, FnExpr fn, GeneratorAdapter gen){
if(context != C.STATEMENT)
{
- gen.push(className);
+ gen.push(c.getName());
gen.invokeStatic(CLASS_TYPE, forNameMethod);
}
}
@@ -1638,10 +1675,10 @@ static class ClassExpr implements Expr{
//(class Classname)
if(form.count() != 2)
throw new Exception("wrong number of arguments, expecting: (class Classname)");
- String className = HostExpr.maybeClassName(RT.second(form), true);
- if(className == null)
+ Class c = HostExpr.maybeClass(RT.second(form), true);
+ if(c == null)
throw new IllegalArgumentException("Unable to resolve classname: " + RT.second(form));
- return new ClassExpr(className);
+ return new ClassExpr(c);
}
}
}
@@ -1665,7 +1702,6 @@ static int getMatchingParams(ArrayList<Class[]> paramlists, IPersistentVector ar
}
static class NewExpr implements Expr{
- final String className;
final IPersistentVector args;
final Constructor ctor;
final Class c;
@@ -1674,10 +1710,9 @@ static class NewExpr implements Expr{
final static Method forNameMethod = Method.getMethod("Class forName(String)");
- public NewExpr(String className, IPersistentVector args, int line) throws Exception{
+ public NewExpr(Class c, IPersistentVector args, int line) throws Exception{
this.args = args;
- this.className = className;
- this.c = Class.forName(className);
+ this.c = c;
Constructor[] allctors = c.getConstructors();
ArrayList ctors = new ArrayList();
ArrayList<Class[]> params = new ArrayList();
@@ -1702,7 +1737,7 @@ static class NewExpr implements Expr{
this.ctor = ctoridx >= 0 ? (Constructor) ctors.get(ctoridx) : null;
if(ctor == null && RT.booleanCast(RT.WARN_ON_REFLECTION.get()))
{
- System.err.format("Reflection warning, line: %d - call to %s ctor can't be resolved.\n", line, className);
+ System.err.format("Reflection warning, line: %d - call to %s ctor can't be resolved.\n", line, c.getName());
}
}
@@ -1714,7 +1749,7 @@ static class NewExpr implements Expr{
{
return ctor.newInstance(Reflector.boxArgs(ctor.getParameterTypes(), argvals));
}
- return Reflector.invokeConstructor(Class.forName(className), argvals);
+ return Reflector.invokeConstructor(c, argvals);
}
public void emit(C context, FnExpr fn, GeneratorAdapter gen){
@@ -1728,7 +1763,7 @@ static class NewExpr implements Expr{
}
else
{
- gen.push(className);
+ gen.push(c.getName());
gen.invokeStatic(CLASS_TYPE, forNameMethod);
MethodExpr.emitArgsAsArray(args, fn, gen);
gen.invokeStatic(REFLECTOR_TYPE, invokeConstructorMethod);
@@ -1742,7 +1777,7 @@ static class NewExpr implements Expr{
}
public Class getJavaClass() throws Exception{
- return Class.forName(className);
+ return c;
}
static class Parser implements IParser{
@@ -1752,13 +1787,13 @@ static class NewExpr implements Expr{
//(new Classname args...)
if(form.count() < 2)
throw new Exception("wrong number of arguments, expecting: (new Classname args...)");
- String className = HostExpr.maybeClassName(RT.second(form), false);
- if(className == null)
+ Class c = HostExpr.maybeClass(RT.second(form), false);
+ if(c == null)
throw new IllegalArgumentException("Unable to resolve classname: " + RT.second(form));
PersistentVector args = PersistentVector.EMPTY;
for(ISeq s = RT.rest(RT.rest(form)); s != null; s = s.rest())
args = args.cons(analyze(C.EXPRESSION, s.first()));
- return new NewExpr(className, args, line);
+ return new NewExpr(c, args, line);
}
}
@@ -1818,16 +1853,16 @@ static class IdenticalExpr implements Expr{
static class InstanceExpr implements Expr{
final Expr expr;
- final String className;
+ final Class c;
- public InstanceExpr(Expr expr, String className){
+ public InstanceExpr(Expr expr, Class c){
this.expr = expr;
- this.className = className;
+ this.c = c;
}
public Object eval() throws Exception{
- return Class.forName(className).isInstance(expr.eval()) ?
+ return c.isInstance(expr.eval()) ?
RT.T : RT.F;
}
@@ -1845,7 +1880,7 @@ static class InstanceExpr implements Expr{
Label not = gen.newLabel();
Label end = gen.newLabel();
expr.emit(C.EXPRESSION, fn, gen);
- gen.instanceOf(Type.getObjectType(className.replace('.', '/')));
+ gen.instanceOf(Type.getType(c));
gen.ifZCmp(GeneratorAdapter.EQ, not);
gen.getStatic(BOOLEAN_OBJECT_TYPE, "TRUE", BOOLEAN_OBJECT_TYPE);
// gen.getStatic(RT_TYPE, "T", KEYWORD_TYPE);
@@ -1863,10 +1898,10 @@ static class InstanceExpr implements Expr{
//(instance? x Classname)
if(form.count() != 3)
throw new Exception("wrong number of arguments, expecting: (instance? x Classname)");
- String className = HostExpr.maybeClassName(RT.third(form), true);
- if(className == null)
+ Class c = HostExpr.maybeClass(RT.third(form), true);
+ if(c == null)
throw new IllegalArgumentException("Unable to resolve classname: " + RT.third(form));
- return new InstanceExpr(analyze(C.EXPRESSION, RT.second(form)), className);
+ return new InstanceExpr(analyze(C.EXPRESSION, RT.second(form)), c);
}
}
}
@@ -3228,8 +3263,8 @@ public static Object load(Reader rdr) throws Exception{
{
Var.pushThreadBindings(
RT.map(LOADER, new DynamicClassLoader(),
- RT.NS_REFERS, RT.NS_REFERS.get(),
- RT.NS_IMPORTS, RT.NS_IMPORTS.get(),
+// RT.NS_REFERS, RT.NS_REFERS.get(),
+// RT.NS_IMPORTS, RT.NS_IMPORTS.get(),
RT.CURRENT_NS, RT.CURRENT_NS.get()
));
LineNumberingPushbackReader pushbackReader =
@@ -3266,8 +3301,9 @@ public static void main(String[] args){
try
{
Var.pushThreadBindings(
- RT.map(RT.NS_REFERS, RT.NS_REFERS.get(),
- RT.NS_IMPORTS, RT.NS_IMPORTS.get(),
+ RT.map(
+// RT.NS_REFERS, RT.NS_REFERS.get(),
+// RT.NS_IMPORTS, RT.NS_IMPORTS.get(),
RT.CURRENT_NS, RT.CURRENT_NS.get(),
SOURCE, "REPL"
));
diff --git a/src/jvm/clojure/lang/Namespace.java b/src/jvm/clojure/lang/Namespace.java
index 0cc5936b..b15ae07c 100644
--- a/src/jvm/clojure/lang/Namespace.java
+++ b/src/jvm/clojure/lang/Namespace.java
@@ -42,9 +42,9 @@ Var intern(Symbol sym){
{
if(v == null)
v = new Var(this, sym);
- map = getMappings();
IPersistentMap newMap = map.assoc(sym,v);
mappings.compareAndSet(map,newMap);
+ map = getMappings();
}
if(o instanceof Var && ((Var) o).ns == this)
return (Var) o;
@@ -52,28 +52,46 @@ Var intern(Symbol sym){
throw new IllegalStateException(sym + " already refers to: " + o + " in namespace: " + name);
}
-Var unintern(Var var){
- return null;
-}
-
-public Class importClass(Symbol sym, Class c){
- return null;
+Object reference(Symbol sym, Object val){
+ if(sym.ns != null)
+ {
+ throw new IllegalArgumentException("Can't intern namespace-qualified symbol");
+ }
+ IPersistentMap map = getMappings();
+ Object o;
+ while((o = map.valAt(sym)) == null)
+ {
+ IPersistentMap newMap = map.assoc(sym,val);
+ mappings.compareAndSet(map,newMap);
+ map = getMappings();
+ }
+ if(o == val)
+ return o;
+ throw new IllegalStateException(sym + " already refers to: " + o + " in namespace: " + name);
}
-public Class unimport(Symbol sym){
- return null;
-
+void unintern(Symbol sym) throws Exception{
+ if(sym.ns != null)
+ {
+ throw new IllegalArgumentException("Can't intern namespace-qualified symbol");
+ }
+ IPersistentMap map = getMappings();
+ while(map.containsKey(sym))
+ {
+ IPersistentMap newMap = map.without(sym);
+ mappings.compareAndSet(map,newMap);
+ map = getMappings();
+ }
}
-
-public Var refer(Symbol sym, Var var){
- return null;
+public Class importClass(Symbol sym, Class c){
+ return (Class) reference(sym,c);
}
-public Var unrefer(Symbol sym){
- return null;
+public Var refer(Symbol sym, Var var){
+ return (Var) reference(sym,var);
}
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index f0e13f78..fe1767d5 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -38,47 +38,46 @@ final static IPersistentMap DEFAULT_IMPORTS = map(
// Symbol.create("IPersistentList"), "clojure.lang.IPersistentList",
// Symbol.create("IPersistentVector"), "clojure.lang.IPersistentVector",
Symbol.create("Boolean"), Boolean.class,
-Symbol.create("Byte"), "java.lang.Byte",
-Symbol.create("Character"), "java.lang.Character",
-Symbol.create("Class"), "java.lang.Class",
-Symbol.create("ClassLoader"), "java.lang.ClassLoader",
-Symbol.create("Compiler"), "java.lang.Compiler",
-Symbol.create("Double"), "java.lang.Double",
-Symbol.create("Enum"), "java.lang.Enum",
-Symbol.create("Float"), "java.lang.Float",
-Symbol.create("InheritableThreadLocal"),
-"java.lang.InheritableThreadLocal",
-Symbol.create("Integer"), "java.lang.Integer",
-Symbol.create("Long"), "java.lang.Long",
-Symbol.create("Math"), "java.lang.Math",
-Symbol.create("Number"), "java.lang.Number",
-Symbol.create("Object"), "java.lang.Object",
-Symbol.create("Package"), "java.lang.Package",
-Symbol.create("Process"), "java.lang.Process",
-Symbol.create("ProcessBuilder"), "java.lang.ProcessBuilder",
-Symbol.create("Runtime"), "java.lang.Runtime",
-Symbol.create("RuntimePermission"), "java.lang.RuntimePermission",
-Symbol.create("SecurityManager"), "java.lang.SecurityManager",
-Symbol.create("Short"), "java.lang.Short",
-Symbol.create("StackTraceElement"), "java.lang.StackTraceElement",
-Symbol.create("StrictMath"), "java.lang.StrictMath",
-Symbol.create("String"), "java.lang.String",
-Symbol.create("StringBuffer"), "java.lang.StringBuffer",
-Symbol.create("StringBuilder"), "java.lang.StringBuilder",
-Symbol.create("System"), "java.lang.System",
-Symbol.create("Thread"), "java.lang.Thread",
-Symbol.create("ThreadGroup"), "java.lang.ThreadGroup",
-Symbol.create("ThreadLocal"), "java.lang.ThreadLocal",
-Symbol.create("Throwable"), "java.lang.Throwable",
-Symbol.create("Void"), "java.lang.Void",
-Symbol.create("Appendable"), "java.lang.Appendable",
-Symbol.create("CharSequence"), "java.lang.CharSequence",
-Symbol.create("Cloneable"), "java.lang.Cloneable",
-Symbol.create("Comparable"), "java.lang.Comparable",
-Symbol.create("Iterable"), "java.lang.Iterable",
-Symbol.create("Readable"), "java.lang.Readable",
-Symbol.create("Runnable"), "java.lang.Runnable",
-Symbol.create("Exception"), "java.lang.Exception"
+Symbol.create("Byte"), Byte.class,
+Symbol.create("Character"), Character.class,
+Symbol.create("Class"), Class.class,
+Symbol.create("ClassLoader"), ClassLoader.class,
+Symbol.create("Compiler"), Compiler.class,
+Symbol.create("Double"), Double.class,
+Symbol.create("Enum"), Enum.class,
+Symbol.create("Float"), Float.class,
+Symbol.create("InheritableThreadLocal"),InheritableThreadLocal.class,
+Symbol.create("Integer"), Integer.class,
+Symbol.create("Long"), Long.class,
+Symbol.create("Math"), Math.class,
+Symbol.create("Number"), Number.class,
+Symbol.create("Object"), Object.class,
+Symbol.create("Package"), Package.class,
+Symbol.create("Process"), Process.class,
+Symbol.create("ProcessBuilder"), ProcessBuilder.class,
+Symbol.create("Runtime"), Runtime.class,
+Symbol.create("RuntimePermission"), RuntimePermission.class,
+Symbol.create("SecurityManager"), SecurityManager.class,
+Symbol.create("Short"), Short.class,
+Symbol.create("StackTraceElement"), StackTraceElement.class,
+Symbol.create("StrictMath"), StrictMath.class,
+Symbol.create("String"), String.class,
+Symbol.create("StringBuffer"), StringBuffer.class,
+Symbol.create("StringBuilder"), StringBuilder.class,
+Symbol.create("System"), System.class,
+Symbol.create("Thread"), Thread.class,
+Symbol.create("ThreadGroup"), ThreadGroup.class,
+Symbol.create("ThreadLocal"), ThreadLocal.class,
+Symbol.create("Throwable"), Throwable.class,
+Symbol.create("Void"), Void.class,
+Symbol.create("Appendable"), Appendable.class,
+Symbol.create("CharSequence"), CharSequence.class,
+Symbol.create("Cloneable"), Cloneable.class,
+Symbol.create("Comparable"), Comparable.class,
+Symbol.create("Iterable"), Iterable.class,
+Symbol.create("Readable"), Readable.class,
+Symbol.create("Runnable"), Runnable.class,
+Symbol.create("Exception"), Exception.class
// Symbol.create("Collection"), "java.util.Collection",
// Symbol.create("Comparator"), "java.util.Comparator",
// Symbol.create("Enumeration"), "java.util.Enumeration",
@@ -163,8 +162,8 @@ final static Var REFERS =
})
));
-static Var NS_IMPORTS = Var.intern(CLOJURE_NS,Symbol.create("*ns-imports*"), IMPORTS);
-static Var NS_REFERS = Var.intern(CLOJURE_NS,Symbol.create("*ns-refers*"), REFERS);
+//static Var NS_IMPORTS = Var.intern(CLOJURE_NS,Symbol.create("*ns-imports*"), IMPORTS);
+//static Var NS_REFERS = Var.intern(CLOJURE_NS,Symbol.create("*ns-refers*"), REFERS);
static public final Object[] EMPTY_ARRAY = new Object[]{};
//static public final Character[] chars;
static AtomicInteger id = new AtomicInteger(1);
diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java
index 6b330887..ccb108ba 100644
--- a/src/jvm/clojure/lang/Reflector.java
+++ b/src/jvm/clojure/lang/Reflector.java
@@ -136,6 +136,10 @@ public static Object invokeStaticMethodVariadic(String className, String methodN
public static Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception{
Class c = Class.forName(className);
+ return invokeStaticMethod(c, methodName, args);
+}
+
+public static Object invokeStaticMethod(Class c, String methodName, Object[] args) throws Exception{
if(methodName.equals("new"))
return invokeConstructor(c, args);
List methods = getMethods(c, args.length, methodName, true);
@@ -144,6 +148,10 @@ public static Object invokeStaticMethod(String className, String methodName, Obj
public static Object getStaticField(String className, String fieldName) throws Exception{
Class c = Class.forName(className);
+ return getStaticField(c, fieldName);
+}
+
+public static Object getStaticField(Class c, String fieldName) throws Exception{
// if(fieldName.equals("class"))
// return c;
Field f = getField(c, fieldName, true);
@@ -153,9 +161,12 @@ public static Object getStaticField(String className, String fieldName) throws E
}
throw new IllegalArgumentException("No matching field found");
}
-
public static Object setStaticField(String className, String fieldName, Object val) throws Exception{
Class c = Class.forName(className);
+ return setStaticField(c, fieldName, val);
+}
+
+public static Object setStaticField(Class c, String fieldName, Object val) throws Exception{
Field f = getField(c, fieldName, true);
if(f != null)
{
diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java
index 65026bef..95a2067c 100644
--- a/src/jvm/clojure/lang/Repl.java
+++ b/src/jvm/clojure/lang/Repl.java
@@ -36,8 +36,9 @@ public static void main(String[] args){
try
{
Var.pushThreadBindings(
- RT.map(RT.NS_REFERS, RT.NS_REFERS.get(),
- RT.NS_IMPORTS, RT.NS_IMPORTS.get(),
+ RT.map(
+// RT.NS_REFERS, RT.NS_REFERS.get(),
+// RT.NS_IMPORTS, RT.NS_IMPORTS.get(),
RT.CURRENT_NS, RT.CURRENT_NS.get(),
RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.get(),
Compiler.SOURCE, "REPL"