diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-06-04 01:21:43 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-06-04 01:21:43 +0000 |
commit | 005ea1b5f96c5bb762e155032a865e29ad71bcf3 (patch) | |
tree | 2b0823409c222fddb9a4baefb15da41e0fc391a1 /src | |
parent | 65cb1b97f60c995309e1bd8a2f93145b5dcc700f (diff) |
allow : as a non-repeating, non-terminal constituent character in symbols
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index d775ceca..2d0faece 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -39,7 +39,8 @@ static Symbol DEREF = Symbol.create("clojure", "deref"); static IFn[] macros = new IFn[256];
static IFn[] dispatchMacros = new IFn[256];
-static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^:/]][^:/]*/)?[\\D&&[^:/]][^:/]*");
+//static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^:/]][^:/]*/)?[\\D&&[^:/]][^:/]*");
+static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^:/]][^/]*/)?([\\D&&[^:/]][^/]*)");
//static Pattern varPat = Pattern.compile("([\\D&&[^:\\.]][^:\\.]*):([\\D&&[^:\\.]][^:\\.]*)");
static Pattern intPat = Pattern.compile("[-+]?[0-9]+\\.?");
static Pattern ratioPat = Pattern.compile("([-+]?[0-9]+)/([0-9]+)");
@@ -266,6 +267,13 @@ private static Object matchSymbol(String s){ Matcher m = symbolPat.matcher(s);
if(m.matches())
{
+ int gc = m.groupCount();
+ String ns = m.group(1);
+ String name = m.group(2);
+ if(ns != null && ns.endsWith(":/")
+ || name.endsWith(":")
+ || s.contains("::"))
+ return null;
boolean isKeyword = s.charAt(0) == ':';
Symbol sym = Symbol.intern(s.substring(isKeyword ? 1 : 0));
if(isKeyword)
|