summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-11-20 18:44:54 +0000
committerRich Hickey <richhickey@gmail.com>2008-11-20 18:44:54 +0000
commit61137136b2039322512b5f65a35ecd669af194a6 (patch)
tree834415fd5a41082e64a7b76adf0b8908707cf7db /src
parent083c5e1c61096f70d783bfad4d3319d9a5242171 (diff)
fixed resolving keywords, smap when no source
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Compiler.java25
-rw-r--r--src/jvm/clojure/lang/LispReader.java8
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));