@@ -385,7 +385,7 @@ static final int readInt(final JsonIterator iter, final byte c) throws IOExcepti
385
385
return IterImplForStreaming .readIntSlowPath (iter , ind );
386
386
}
387
387
388
- static final long readLong (final JsonIterator iter , final byte c , final boolean negative ) throws IOException {
388
+ static final long readLong (final JsonIterator iter , final byte c ) throws IOException {
389
389
long ind = IterImplNumber .intDigits [c ];
390
390
if (ind == 0 ) {
391
391
IterImplForStreaming .assertNotLeadingZero (iter );
@@ -399,60 +399,59 @@ static final long readLong(final JsonIterator iter, final byte c, final boolean
399
399
int ind2 = IterImplNumber .intDigits [iter .buf [i ]];
400
400
if (ind2 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
401
401
iter .head = i ;
402
- return negative ? - ind : ind ;
402
+ return - ind ;
403
403
}
404
404
int ind3 = IterImplNumber .intDigits [iter .buf [++i ]];
405
405
if (ind3 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
406
406
iter .head = i ;
407
407
ind = ind * 10 + ind2 ;
408
- return negative ? - ind : ind ;
408
+ return - ind ;
409
409
}
410
410
int ind4 = IterImplNumber .intDigits [iter .buf [++i ]];
411
411
if (ind4 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
412
412
iter .head = i ;
413
413
ind = ind * 100 + ind2 * 10 + ind3 ;
414
- return negative ? - ind : ind ;
414
+ return - ind ;
415
415
}
416
416
int ind5 = IterImplNumber .intDigits [iter .buf [++i ]];
417
417
if (ind5 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
418
418
iter .head = i ;
419
419
ind = ind * 1000 + ind2 * 100 + ind3 * 10 + ind4 ;
420
- return negative ? - ind : ind ;
420
+ return - ind ;
421
421
}
422
422
int ind6 = IterImplNumber .intDigits [iter .buf [++i ]];
423
423
if (ind6 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
424
424
iter .head = i ;
425
425
ind = ind * 10000 + ind2 * 1000 + ind3 * 100 + ind4 * 10 + ind5 ;
426
- return negative ? - ind : ind ;
426
+ return - ind ;
427
427
}
428
428
int ind7 = IterImplNumber .intDigits [iter .buf [++i ]];
429
429
if (ind7 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
430
430
iter .head = i ;
431
431
ind = ind * 100000 + ind2 * 10000 + ind3 * 1000 + ind4 * 100 + ind5 * 10 + ind6 ;
432
- return negative ? - ind : ind ;
432
+ return - ind ;
433
433
}
434
434
int ind8 = IterImplNumber .intDigits [iter .buf [++i ]];
435
435
if (ind8 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
436
436
iter .head = i ;
437
437
ind = ind * 1000000 + ind2 * 100000 + ind3 * 10000 + ind4 * 1000 + ind5 * 100 + ind6 * 10 + ind7 ;
438
- return negative ? - ind : ind ;
438
+ return - ind ;
439
439
}
440
440
int ind9 = IterImplNumber .intDigits [iter .buf [++i ]];
441
441
ind = ind * 10000000 + ind2 * 1000000 + ind3 * 100000 + ind4 * 10000 + ind5 * 1000 + ind6 * 100 + ind7 * 10 + ind8 ;
442
442
iter .head = i ;
443
443
if (ind9 == IterImplNumber .INVALID_CHAR_FOR_NUMBER ) {
444
- return negative ? - ind : ind ;
444
+ return - ind ;
445
445
}
446
446
}
447
- return IterImplForStreaming .readLongSlowPath (iter , ind , negative );
447
+ return IterImplForStreaming .readLongSlowPath (iter , ind );
448
448
}
449
449
450
- static final double readDouble (final JsonIterator iter , final boolean negative ) throws IOException {
450
+ static final double readDouble (final JsonIterator iter ) throws IOException {
451
451
int oldHead = iter .head ;
452
452
try {
453
453
try {
454
454
long value = IterImplNumber .readLong (iter ); // without the dot & sign
455
- value = negative ? -value : value ;
456
455
if (iter .head == iter .tail ) {
457
456
return value ;
458
457
}
@@ -461,29 +460,30 @@ static final double readDouble(final JsonIterator iter, final boolean negative)
461
460
iter .head ++;
462
461
int start = iter .head ;
463
462
c = iter .buf [iter .head ++];
464
- long decimalPart = readLong (iter , c , negative );
463
+ long decimalPart = readLong (iter , c );
464
+ if (decimalPart == Long .MIN_VALUE ) {
465
+ return IterImplForStreaming .readDoubleSlowPath (iter );
466
+ }
467
+ decimalPart = -decimalPart ;
465
468
int decimalPlaces = iter .head - start ;
466
469
if (decimalPlaces > 0 && decimalPlaces < IterImplNumber .POW10 .length && (iter .head - oldHead ) < 10 ) {
467
470
return value + (decimalPart / (double ) IterImplNumber .POW10 [decimalPlaces ]);
468
471
} else {
469
472
iter .head = oldHead ;
470
- double result = IterImplForStreaming .readDoubleSlowPath (iter );
471
- return negative ? -result : result ;
473
+ return IterImplForStreaming .readDoubleSlowPath (iter );
472
474
}
473
475
} else {
474
476
return value ;
475
477
}
476
478
} finally {
477
479
if (iter .head < iter .tail && (iter .buf [iter .head ] == 'e' || iter .buf [iter .head ] == 'E' )) {
478
480
iter .head = oldHead ;
479
- double result = IterImplForStreaming .readDoubleSlowPath (iter );
480
- return negative ? -result : result ;
481
+ return IterImplForStreaming .readDoubleSlowPath (iter );
481
482
}
482
483
}
483
484
} catch (JsonException e ) {
484
485
iter .head = oldHead ;
485
- double result = IterImplForStreaming .readDoubleSlowPath (iter );
486
- return negative ? -result : result ;
486
+ return IterImplForStreaming .readDoubleSlowPath (iter );
487
487
}
488
488
}
489
489
}
0 commit comments