diff core/src/luan/modules/parsers/Json.java @ 759:ae612dfc57cb 0.21

better handling of longs in rpc and json
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 19 Jul 2016 09:09:41 -0600
parents c29d11d675fd
children
line wrap: on
line diff
--- a/core/src/luan/modules/parsers/Json.java	Tue Jul 19 00:57:37 2016 -0600
+++ b/core/src/luan/modules/parsers/Json.java	Tue Jul 19 09:09:41 2016 -0600
@@ -120,6 +120,7 @@
 
 	private Number number() {
 		int start = parser.begin();
+		boolean isFloat = false;
 		parser.match('-');
 		if( !parser.match('0') ) {
 			if( !parser.inCharRange('1','9') )
@@ -130,15 +131,22 @@
 			if( !parser.inCharRange('0','9') )
 				return parser.failure(null);
 			while( parser.inCharRange('0','9') );
+			isFloat = true;
 		}
 		if( parser.anyOf("eE") ) {
 			parser.anyOf("+-");
 			if( !parser.inCharRange('0','9') )
 				return parser.failure(null);
 			while( parser.inCharRange('0','9') );
+			isFloat = true;
 		}
 		String s = parser.textFrom(start);
-		return parser.success(Double.valueOf(s));
+		Number n;
+		if(isFloat)
+			n = Double.valueOf(s);
+		else
+			n = Long.valueOf(s);
+		return parser.success(n);
 	}
 
 	private LuanTable array() throws ParseException {