changeset 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 2a91bde4e1e1
files core/src/luan/modules/IoLuan.java core/src/luan/modules/RpcLuan.java core/src/luan/modules/parsers/Json.java
diffstat 3 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/core/src/luan/modules/IoLuan.java	Tue Jul 19 00:57:37 2016 -0600
+++ b/core/src/luan/modules/IoLuan.java	Tue Jul 19 09:09:41 2016 -0600
@@ -619,6 +619,9 @@
 				tbl.rawPut( "last_modified", new LuanJavaFunction(
 					File.class.getMethod( "lastModified" ), file
 				) );
+				tbl.rawPut( "length", new LuanJavaFunction(
+					File.class.getMethod( "length" ), file
+				) );
 				tbl.rawPut( "child", new LuanJavaFunction(
 					LuanFile.class.getMethod( "child", LuanState.class, String.class ), this
 				) );
--- a/core/src/luan/modules/RpcLuan.java	Tue Jul 19 00:57:37 2016 -0600
+++ b/core/src/luan/modules/RpcLuan.java	Tue Jul 19 09:09:41 2016 -0600
@@ -32,6 +32,7 @@
 	private static final int BINARY = 4;
 	private static final int TABLE = 5;
 	private static final int IO = 6;
+	private static final int LONG = 7;
 
 	@LuanMethod public static Object[] call(LuanState luan,LuanTable socketTbl,String fnName,Object... args)
 		throws LuanException, IOException
@@ -134,6 +135,10 @@
 			out.write(BOOLEAN);
 			writeBoolean(out,(Boolean)obj);
 		}
+		else if( obj instanceof Long ) {
+			out.write(LONG);
+			writeString(out,obj.toString());
+		}
 		else if( obj instanceof Number ) {
 			out.write(NUMBER);
 			writeString(out,obj.toString());
@@ -163,6 +168,8 @@
 			return readString(in);
 		case BOOLEAN:
 			return readBoolean(in);
+		case LONG:
+			return Long.valueOf(readString(in));
 		case NUMBER:
 			return Double.valueOf(readString(in));
 		case BINARY:
--- 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 {