summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-05-10 10:20:08 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-05-17 14:50:17 -0400
commitb1de0dcc75d3f459314350cede79f7d790c77d89 (patch)
tree64793a7b3b1de6a2a968a737de47e8442b459fe2
parent6506709e6de4b10e75a2ce1894c0b39511eca014 (diff)
handle bad keyword syntax #334
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/jvm/clojure/lang/LispReader.java5
-rw-r--r--test/clojure/test_clojure/reader.clj9
2 files changed, 13 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java
index 0bfae974..2618876d 100644
--- a/src/jvm/clojure/lang/LispReader.java
+++ b/src/jvm/clojure/lang/LispReader.java
@@ -307,7 +307,10 @@ private static Object matchSymbol(String s){
else
kns = Compiler.currentNS();
//auto-resolving keyword
- return Keyword.intern(kns.name.name,ks.name);
+ if (kns != null)
+ return Keyword.intern(kns.name.name,ks.name);
+ else
+ return null;
}
boolean isKeyword = s.charAt(0) == ':';
Symbol sym = Symbol.intern(s.substring(isKeyword ? 1 : 0));
diff --git a/test/clojure/test_clojure/reader.clj b/test/clojure/test_clojure/reader.clj
index 223e9d75..1629076f 100644
--- a/test/clojure/test_clojure/reader.clj
+++ b/test/clojure/test_clojure/reader.clj
@@ -235,6 +235,15 @@
(is (instance? clojure.lang.Keyword :alphabet))
)
+(deftest reading-keywords
+ (are [x y] (= x (read-string y))
+ :foo ":foo"
+ :foo/bar ":foo/bar"
+ :user/foo "::foo")
+ (are [err msg form] (thrown-with-msg? err msg (read-string form))
+ Exception #"Invalid token: foo:" "foo:"
+ Exception #"Invalid token: :bar/" ":bar/"
+ Exception #"Invalid token: ::does.not/exist" "::does.not/exist"))
;; Lists
(deftest t-Lists)