Mercurial Hosting > luan
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('[') ) |