diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-07-21 18:59:53 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-07-21 18:59:53 +0000 |
commit | 5f52000facfdbc65ee4e52834dfe9626040e54fe (patch) | |
tree | 39a47b48dbeca1558f872fed0ebf28b6725c7176 /src/jvm/clojure | |
parent | 6dad2754a87b142ba536c2b7c8ab546a60a70892 (diff) |
new clj code hierarchy, old still in place
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 11 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 11 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 11 |
3 files changed, 23 insertions, 10 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 7bacaecb..700116c3 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -2286,7 +2286,7 @@ static class IfExpr implements Expr{ static final public IPersistentMap CHAR_MAP = PersistentHashMap.create('-', "_", - '.', "_DOT_", +// '.', "_DOT_", ':', "_COLON_", '+', "_PLUS_", '>', "_GT_", @@ -2683,7 +2683,8 @@ static public class FnExpr implements Expr{ //fn.thisName = name; String basename = enclosingMethod != null ? (enclosingMethod.fn.name + "$") - : "clojure.fns." + (munge(currentNS().name.name) + "."); + : //"clojure.fns." + + (munge(currentNS().name.name) + "."); if(RT.second(form) instanceof Symbol) name = ((Symbol) RT.second(form)).name; fn.simpleName = ((name != null ? @@ -3827,9 +3828,11 @@ public static Object eval(Object form) throws Exception{ } try { - if(form instanceof IPersistentCollection) + if(form instanceof IPersistentCollection + && !(RT.first(form) instanceof Symbol + && ((Symbol)RT.first(form)).name.startsWith("def"))) { - FnExpr fexpr = (FnExpr) analyze(C.EXPRESSION, RT.list(FN, PersistentVector.EMPTY, form), "repl"); + FnExpr fexpr = (FnExpr) analyze(C.EXPRESSION, RT.list(FN, PersistentVector.EMPTY, form), "eval"); IFn fn = (IFn) fexpr.eval(); return fn.invoke(); } diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index cba00ec0..23261e75 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -289,11 +289,12 @@ static public void init() throws Exception{ } static void doInit() throws Exception{ - loadResourceScript(RT.class, "boot.clj"); - loadResourceScript(RT.class, "proxy.clj"); - loadResourceScript(RT.class, "zip.clj"); - loadResourceScript(RT.class, "xml.clj"); - loadResourceScript(RT.class, "set.clj"); + loadResourceScript(RT.class, "clojure/boot.clj"); + loadResourceScript(RT.class, "clojure/proxy.clj"); + loadResourceScript(RT.class, "clojure/genclass.clj"); + loadResourceScript(RT.class, "clojure/zip/zip.clj"); + loadResourceScript(RT.class, "clojure/xml/xml.clj"); + loadResourceScript(RT.class, "clojure/set/set.clj"); Var.pushThreadBindings( RT.map(CURRENT_NS, CURRENT_NS.get(), diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java index da9edf5f..d5b14edc 100644 --- a/src/jvm/clojure/lang/Reflector.java +++ b/src/jvm/clojure/lang/Reflector.java @@ -36,7 +36,7 @@ public static Object invokeInstanceMethod(Object target, String methodName, Obje } static Object invokeMatchingMethod(String methodName, List methods, Object target, Object[] args) - throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{ + throws Exception{ Method m = null; Object[] boxedArgs = null; if(methods.isEmpty()) @@ -77,7 +77,16 @@ static Object invokeMatchingMethod(String methodName, List methods, Object targe } if(m == null) throw new IllegalArgumentException("No matching method found: " + methodName); + try{ return prepRet(m.getReturnType(), m.invoke(target, boxedArgs)); + } + catch(InvocationTargetException e) + { + if(e.getCause() instanceof Exception) + throw (Exception) e.getCause(); + throw e; + } + } public static Method getAsMethodOfPublicBase(Class c, Method m){ |