diff options
author | Steve Gilardi <scgilardi@gmail.com> | 2009-05-04 00:00:00 -0400 |
---|---|---|
committer | Chouser <chouser@n01se.net> | 2009-06-19 22:26:26 -0400 |
commit | f1d13b8f1fbda376352caf85857cc0585717bcd9 (patch) | |
tree | a55c2abcbc698c1232a2ed94714550edc91e89bd | |
parent | f79e724224f86d938cd6ed287355808233c899e9 (diff) |
parse "1." and "1.e3" as legal floats. Refs #117
Signed-off-by: Chouser <chouser@n01se.net>
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index 14c39399..41a5eb58 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -47,9 +47,9 @@ static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/ //static Pattern intPat = Pattern.compile("[-+]?[0-9]+\\.?"); static Pattern intPat = Pattern.compile( - "([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)\\.?"); + "([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)"); static Pattern ratioPat = Pattern.compile("([-+]?[0-9]+)/([0-9]+)"); -static Pattern floatPat = Pattern.compile("[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?[M]?"); +static Pattern floatPat = Pattern.compile("([-+]?[0-9]+(\\.[0-9]*)?([eE][-+]?[0-9]+)?)(M)?"); static final Symbol SLASH = Symbol.create("/"); static final Symbol CLOJURE_SLASH = Symbol.create("clojure.core","/"); //static Pattern accessorPat = Pattern.compile("\\.[a-zA-Z_]\\w*"); @@ -344,8 +344,8 @@ private static Object matchNumber(String s){ m = floatPat.matcher(s); if(m.matches()) { - if(s.charAt(s.length() - 1) == 'M') - return new BigDecimal(s.substring(0, s.length() - 1)); + if(m.group(4) != null) + return new BigDecimal(m.group(1)); return Double.parseDouble(s); } m = ratioPat.matcher(s); |