summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/LispReader.java7
-rw-r--r--src/jvm/clojure/lang/RT.java6
2 files changed, 12 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java
index 0567cffe..6fda4c9e 100644
--- a/src/jvm/clojure/lang/LispReader.java
+++ b/src/jvm/clojure/lang/LispReader.java
@@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.math.BigInteger;
+import java.math.BigDecimal;
import java.lang.*;
public class LispReader{
@@ -42,7 +43,7 @@ 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]+)");
-static Pattern floatPat = Pattern.compile("[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?");
+static Pattern floatPat = Pattern.compile("[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?[M]?");
static final Symbol SLASH = Symbol.create("/");
//static Pattern accessorPat = Pattern.compile("\\.[a-zA-Z_]\\w*");
//static Pattern instanceMemberPat = Pattern.compile("\\.([a-zA-Z_][\\w\\.]*)\\.([a-zA-Z_]\\w*)");
@@ -245,7 +246,11 @@ private static Object matchNumber(String s){
return Numbers.reduce(new BigInteger(s));
m = floatPat.matcher(s);
if(m.matches())
+ {
+ if(s.charAt(s.length()-1) == 'M')
+ return new BigDecimal(s.substring(0, s.length() - 1));
return Double.parseDouble(s);
+ }
m = ratioPat.matcher(s);
if(m.matches())
{
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 3189d53f..02858459 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -18,6 +18,7 @@ import java.util.*;
import java.util.regex.Matcher;
import java.io.*;
import java.lang.reflect.Array;
+import java.math.BigDecimal;
public class RT{
@@ -985,6 +986,11 @@ static public void print(Object x, Writer w) throws Exception{
}
}
}
+ else if(x instanceof BigDecimal && readably)
+ {
+ w.write(x.toString());
+ w.write('M');
+ }
else w.write(x.toString());
}