@@ -58,6 +58,7 @@ class LookaheadParserHandler {
58
58
59
59
protected:
60
60
enum LookaheadParsingState {
61
+ kInit ,
61
62
kError ,
62
63
kHasNull ,
63
64
kHasBool ,
@@ -78,7 +79,7 @@ class LookaheadParserHandler {
78
79
static const int parseFlags = kParseDefaultFlags | kParseInsituFlag ;
79
80
};
80
81
81
- LookaheadParserHandler::LookaheadParserHandler (char * str) : v_(), ss_(str) {
82
+ LookaheadParserHandler::LookaheadParserHandler (char * str) : v_(), st_( kInit ), r_(), ss_(str) {
82
83
r_.IterativeParseInit ();
83
84
ParseNext ();
84
85
}
@@ -145,12 +146,12 @@ const char* LookaheadParser::NextObjectKey() {
145
146
return result;
146
147
}
147
148
148
- if (st_ = = kExitingObject ) {
149
- ParseNext () ;
149
+ if (st_ ! = kExitingObject ) {
150
+ st_ = kError ;
150
151
return 0 ;
151
152
}
152
153
153
- st_ = kError ;
154
+ ParseNext () ;
154
155
return 0 ;
155
156
}
156
157
@@ -180,7 +181,7 @@ int LookaheadParser::GetInt() {
180
181
}
181
182
182
183
double LookaheadParser::GetDouble () {
183
- if (st_ != kHasNumber || !v_. IsNumber () ) {
184
+ if (st_ != kHasNumber ) {
184
185
st_ = kError ;
185
186
return 0 .;
186
187
}
@@ -223,27 +224,16 @@ const char* LookaheadParser::GetString() {
223
224
224
225
void LookaheadParser::SkipOut (int depth) {
225
226
do {
226
- switch (st_) {
227
- case kEnteringArray :
228
- case kEnteringObject :
229
- ++depth;
230
- break ;
231
-
232
- case kExitingArray :
233
- case kExitingObject :
234
- --depth;
235
- break ;
236
-
237
- case kError :
238
- return ;
239
-
240
- case kHasNull :
241
- case kHasBool :
242
- case kHasNumber :
243
- case kHasString :
244
- case kHasKey :
245
- break ;
227
+ if (st_ == kEnteringArray || st_ == kEnteringObject ) {
228
+ ++depth;
246
229
}
230
+ else if (st_ == kExitingArray || st_ == kExitingObject ) {
231
+ --depth;
232
+ }
233
+ else if (st_ == kError ) {
234
+ return ;
235
+ }
236
+
247
237
ParseNext ();
248
238
}
249
239
while (depth > 0 );
@@ -270,25 +260,19 @@ Value* LookaheadParser::PeekValue() {
270
260
}
271
261
272
262
int LookaheadParser::PeekType () {
273
- switch (st_) {
274
- case kHasNull :
275
- case kHasBool :
276
- case kHasNumber :
277
- case kHasString :
278
- case kHasKey :
279
- return v_.GetType ();
280
-
281
- case kEnteringArray :
282
- return kArrayType ;
283
-
284
- case kEnteringObject :
285
- return kObjectType ;
286
-
287
- case kExitingArray :
288
- case kExitingObject :
289
- case kError :
290
- return -1 ;
263
+ if (st_ >= kHasNull && st_ <= kHasKey ) {
264
+ return v_.GetType ();
265
+ }
266
+
267
+ if (st_ == kEnteringArray ) {
268
+ return kArrayType ;
291
269
}
270
+
271
+ if (st_ == kEnteringObject ) {
272
+ return kObjectType ;
273
+ }
274
+
275
+ return -1 ;
292
276
}
293
277
294
278
// -------------------------------------------------------------------------
0 commit comments