comparison 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
comparison
equal deleted inserted replaced
758:c29d11d675fd 759:ae612dfc57cb
118 throw exception("unclosed string"); 118 throw exception("unclosed string");
119 } 119 }
120 120
121 private Number number() { 121 private Number number() {
122 int start = parser.begin(); 122 int start = parser.begin();
123 boolean isFloat = false;
123 parser.match('-'); 124 parser.match('-');
124 if( !parser.match('0') ) { 125 if( !parser.match('0') ) {
125 if( !parser.inCharRange('1','9') ) 126 if( !parser.inCharRange('1','9') )
126 return parser.failure(null); 127 return parser.failure(null);
127 while( parser.inCharRange('0','9') ); 128 while( parser.inCharRange('0','9') );
128 } 129 }
129 if( parser.match('.') ) { 130 if( parser.match('.') ) {
130 if( !parser.inCharRange('0','9') ) 131 if( !parser.inCharRange('0','9') )
131 return parser.failure(null); 132 return parser.failure(null);
132 while( parser.inCharRange('0','9') ); 133 while( parser.inCharRange('0','9') );
134 isFloat = true;
133 } 135 }
134 if( parser.anyOf("eE") ) { 136 if( parser.anyOf("eE") ) {
135 parser.anyOf("+-"); 137 parser.anyOf("+-");
136 if( !parser.inCharRange('0','9') ) 138 if( !parser.inCharRange('0','9') )
137 return parser.failure(null); 139 return parser.failure(null);
138 while( parser.inCharRange('0','9') ); 140 while( parser.inCharRange('0','9') );
141 isFloat = true;
139 } 142 }
140 String s = parser.textFrom(start); 143 String s = parser.textFrom(start);
141 return parser.success(Double.valueOf(s)); 144 Number n;
145 if(isFloat)
146 n = Double.valueOf(s);
147 else
148 n = Long.valueOf(s);
149 return parser.success(n);
142 } 150 }
143 151
144 private LuanTable array() throws ParseException { 152 private LuanTable array() throws ParseException {
145 parser.begin(); 153 parser.begin();
146 if( !parser.match('[') ) 154 if( !parser.match('[') )