 |
Changeset 3909
- Timestamp:
- 08/24/08 23:05:41
(3 months ago)
- Author:
- kris
- Message:
made parser faster
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r3872 |
r3909 |
|
| 24 | 24 | public enum Token |
|---|
| 25 | 25 | { |
|---|
| 26 | | Name, String, Number, BeginObject, EndObject, |
|---|
| 27 | | BeginArray, EndArray, True, False, Null, Empty |
|---|
| | 26 | Empty, Name, String, Number, BeginObject, EndObject, |
|---|
| | 27 | BeginArray, EndArray, True, False, Null |
|---|
| 28 | 28 | } |
|---|
| 29 | 29 | |
|---|
| … | … | |
| 174 | 174 | ++p; |
|---|
| 175 | 175 | |
|---|
| 176 | | if(*p != '"') |
|---|
| 177 | | expected("\" in member name"); |
|---|
| 178 | | |
|---|
| 179 | | curLoc = ++p; |
|---|
| | 176 | if (*p != '"') |
|---|
| | 177 | expected ("\" before member name"); |
|---|
| | 178 | |
|---|
| | 179 | curLoc = p+1; |
|---|
| 180 | 180 | curType = Token.Name; |
|---|
| 181 | | |
|---|
| 182 | | while (p < e) |
|---|
| 183 | | { |
|---|
| 184 | | if (*p is '"') |
|---|
| 185 | | if (*(p-1) != '\\') |
|---|
| 186 | | break; |
|---|
| 187 | | ++p; |
|---|
| 188 | | } |
|---|
| | 181 | |
|---|
| | 182 | while (++p < e) |
|---|
| | 183 | if (*p is '"' && !escaped(p)) |
|---|
| | 184 | break; |
|---|
| 189 | 185 | |
|---|
| 190 | 186 | if (p < e) |
|---|
| … | … | |
| 258 | 254 | curLoc = p; |
|---|
| 259 | 255 | curType = Token.Number; |
|---|
| 260 | | |
|---|
| | 256 | |
|---|
| 261 | 257 | while (p < e) |
|---|
| 262 | 258 | { |
|---|
| … | … | |
| 286 | 282 | auto e = str.end; |
|---|
| 287 | 283 | |
|---|
| 288 | | if (*p != '"') |
|---|
| 289 | | expected ("\" in string"); |
|---|
| 290 | | |
|---|
| 291 | | curLoc = ++p; |
|---|
| | 284 | curLoc = p+1; |
|---|
| 292 | 285 | curType = Token.String; |
|---|
| 293 | 286 | |
|---|
| 294 | | while (p < e) |
|---|
| 295 | | { |
|---|
| 296 | | if (*p is '"') |
|---|
| 297 | | if (*(p-1) != '\\') |
|---|
| 298 | | break; |
|---|
| 299 | | ++p; |
|---|
| 300 | | } |
|---|
| | 287 | while (++p < e) |
|---|
| | 288 | if (*p is '"' && !escaped(p)) |
|---|
| | 289 | break; |
|---|
| 301 | 290 | |
|---|
| 302 | 291 | if (p < e) |
|---|
| … | … | |
| 371 | 360 | |
|---|
| 372 | 361 | return parseValue (*(str.ptr = p)); |
|---|
| | 362 | } |
|---|
| | 363 | |
|---|
| | 364 | /*********************************************************************** |
|---|
| | 365 | |
|---|
| | 366 | ***********************************************************************/ |
|---|
| | 367 | |
|---|
| | 368 | private int escaped (T* p) |
|---|
| | 369 | { |
|---|
| | 370 | int i; |
|---|
| | 371 | |
|---|
| | 372 | while (*--p is '\\') |
|---|
| | 373 | ++i; |
|---|
| | 374 | return i & 1; |
|---|
| 373 | 375 | } |
|---|
| 374 | 376 | } |
|---|
Download in other formats:
|
 |
 |
|
 |
Copyright © 2006-2008 Tango. All Rights Reserved. | Page Width:
Static or
Dynamic