diff options
author | Stuart Halloway <stu@thinkrelevance.com> | 2010-05-10 10:20:08 -0400 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-05-17 14:50:17 -0400 |
commit | b1de0dcc75d3f459314350cede79f7d790c77d89 (patch) | |
tree | 64793a7b3b1de6a2a968a737de47e8442b459fe2 | |
parent | 6506709e6de4b10e75a2ce1894c0b39511eca014 (diff) |
handle bad keyword syntax #334
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 5 | ||||
-rw-r--r-- | test/clojure/test_clojure/reader.clj | 9 |
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) |