summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-07-21 18:59:53 +0000
committerRich Hickey <richhickey@gmail.com>2008-07-21 18:59:53 +0000
commit5f52000facfdbc65ee4e52834dfe9626040e54fe (patch)
tree39a47b48dbeca1558f872fed0ebf28b6725c7176 /src/jvm/clojure
parent6dad2754a87b142ba536c2b7c8ab546a60a70892 (diff)
new clj code hierarchy, old still in place
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Compiler.java11
-rw-r--r--src/jvm/clojure/lang/RT.java11
-rw-r--r--src/jvm/clojure/lang/Reflector.java11
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){