diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-11-20 18:44:54 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-11-20 18:44:54 +0000 |
commit | 61137136b2039322512b5f65a35ecd669af194a6 (patch) | |
tree | 834415fd5a41082e64a7b76adf0b8908707cf7db /src | |
parent | 083c5e1c61096f70d783bfad4d3319d9a5242171 (diff) |
fixed resolving keywords, smap when no source
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 25 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 8 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index bbb5afff..55f2152a 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -2997,15 +2997,18 @@ static public class FnExpr implements Expr{ { //cv.visitSource(source, null); String smap = "SMAP\n" + - source.substring(0,source.lastIndexOf('.')) + ".java\n" + - "Clojure\n" + - "*S Clojure\n" + - "*F\n" + - "+ 1 " + source + "\n" + - (String) SOURCE_PATH.get() + "\n" + - "*L\n" + - String.format("%d#1,%d:%d\n", lineBefore, lineAfter - lineBefore, lineBefore) + - "*E"; + ((source.lastIndexOf('.') > 0) ? + source.substring(0, source.lastIndexOf('.')) + : simpleName) + + ".java\n" + + "Clojure\n" + + "*S Clojure\n" + + "*F\n" + + "+ 1 " + source + "\n" + + (String) SOURCE_PATH.get() + "\n" + + "*L\n" + + String.format("%d#1,%d:%d\n", lineBefore, lineAfter - lineBefore, lineBefore) + + "*E"; cv.visitSource(source, smap); } @@ -4198,11 +4201,11 @@ static Object resolve(Symbol sym) throws Exception{ return resolveIn(currentNS(), sym, false); } -static private Namespace namespaceFor(Symbol sym){ +static Namespace namespaceFor(Symbol sym){ return namespaceFor(currentNS(), sym); } -static private Namespace namespaceFor(Namespace inns, Symbol sym){ +static Namespace namespaceFor(Namespace inns, Symbol sym){ //note, presumes non-nil sym.ns // first check against currentNS' aliases... Symbol nsSym = Symbol.create(sym.ns); diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index fe3344bf..3f8349a2 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -298,8 +298,14 @@ private static Object matchSymbol(String s){ return null;
if(s.startsWith("::"))
{
+ Symbol ks = Symbol.intern(s.substring(2));
+ Namespace kns;
+ if(ks.ns != null)
+ kns = Compiler.namespaceFor(ks);
+ else
+ kns = Compiler.currentNS();
//auto-resolving keyword
- return Keyword.intern(Compiler.resolveSymbol(Symbol.intern(s.substring(2))));
+ return Keyword.intern(kns.name.name,ks.name);
}
boolean isKeyword = s.charAt(0) == ':';
Symbol sym = Symbol.intern(s.substring(isKeyword ? 1 : 0));
|