Skip to content

Commit 9346ad0

Browse files
committed
More efficient parsing of zero numbers
Co-authored-by: xtonik <[email protected]>
1 parent 26060f7 commit 9346ad0

File tree

3 files changed

+24
-24
lines changed
  • jsoniter-scala-core

3 files changed

+24
-24
lines changed

jsoniter-scala-core/js/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/core/JsonReader.scala

+8-8
Original file line numberDiff line numberDiff line change
@@ -2039,10 +2039,10 @@ final class JsonReader private[jsoniter_scala](
20392039
b = nextByte(head)
20402040
s = -1
20412041
}
2042-
if (b < '0' || b > '9') numberError()
20432042
var x = b - '0'
20442043
if (isToken && x == 0) ensureNotLeadingZero()
20452044
else {
2045+
if (b < '0' || b > '9') numberError()
20462046
var pos = head
20472047
var buf = this.buf
20482048
while ((pos < tail || {
@@ -2075,10 +2075,10 @@ final class JsonReader private[jsoniter_scala](
20752075
b = nextByte(head)
20762076
s = -1
20772077
}
2078-
if (b < '0' || b > '9') numberError()
20792078
var x = b - '0'
20802079
if (isToken && x == 0) ensureNotLeadingZero()
20812080
else {
2081+
if (b < '0' || b > '9') numberError()
20822082
var pos = head
20832083
var buf = this.buf
20842084
while ((pos < tail || {
@@ -2111,10 +2111,10 @@ final class JsonReader private[jsoniter_scala](
21112111
b = nextByte(head)
21122112
s = 0
21132113
}
2114-
if (b < '0' || b > '9') numberError()
21152114
var x = '0' - b
21162115
if (isToken && x == 0) ensureNotLeadingZero()
21172116
else {
2117+
if (b < '0' || b > '9') numberError()
21182118
var pos = head
21192119
var buf = this.buf
21202120
while ((pos < tail || {
@@ -2149,12 +2149,12 @@ final class JsonReader private[jsoniter_scala](
21492149
b = nextByte(head)
21502150
isPos = false
21512151
}
2152-
if (b < '0' || b > '9') numberError()
21532152
var x1 = '0' - b
21542153
if (isToken && x1 == 0) {
21552154
ensureNotLeadingZero()
21562155
0L
21572156
} else {
2157+
if (b < '0' || b > '9') numberError()
21582158
var pos = head
21592159
var buf = this.buf
21602160
while (x1 > -214748364 && (pos < tail || {
@@ -2213,7 +2213,6 @@ final class JsonReader private[jsoniter_scala](
22132213
b = nextByte(head)
22142214
isNeg = true
22152215
}
2216-
if (b < '0' || b > '9') numberError()
22172216
var pos = head
22182217
var buf = this.buf
22192218
val from = pos - 1
@@ -2235,6 +2234,7 @@ final class JsonReader private[jsoniter_scala](
22352234
b >= '0' && b <= '9'
22362235
}) leadingZeroError(pos - 1)
22372236
} else {
2237+
if (b < '0' || b > '9') numberError()
22382238
while ((pos < tail || {
22392239
pos = loadMore(pos)
22402240
buf = this.buf
@@ -2361,7 +2361,6 @@ final class JsonReader private[jsoniter_scala](
23612361
b = nextByte(head)
23622362
isNeg = true
23632363
}
2364-
if (b < '0' || b > '9') numberError()
23652364
var pos = head
23662365
var buf = this.buf
23672366
val from = pos - 1
@@ -2383,6 +2382,7 @@ final class JsonReader private[jsoniter_scala](
23832382
b >= '0' && b <= '9'
23842383
}) leadingZeroError(pos - 1)
23852384
} else {
2385+
if (b < '0' || b > '9') numberError()
23862386
while ((pos < tail || {
23872387
pos = loadMore(pos)
23882388
buf = this.buf
@@ -2519,11 +2519,11 @@ final class JsonReader private[jsoniter_scala](
25192519
b = nextByte(head)
25202520
s = -1
25212521
}
2522-
if (b < '0' || b > '9') numberError()
25232522
if (isToken && b == '0') {
25242523
ensureNotLeadingZero()
25252524
BigInt(0)
25262525
} else {
2526+
if (b < '0' || b > '9') numberError()
25272527
var pos = head
25282528
var buf = this.buf
25292529
var from = pos - 1
@@ -2562,7 +2562,6 @@ final class JsonReader private[jsoniter_scala](
25622562
b = nextByte(head)
25632563
s = -1
25642564
}
2565-
if (b < '0' || b > '9') numberError()
25662565
var pos = head
25672566
var buf = this.buf
25682567
var from = pos - 1
@@ -2582,6 +2581,7 @@ final class JsonReader private[jsoniter_scala](
25822581
b >= '0' && b <= '9'
25832582
}) leadingZeroError(pos - 1)
25842583
} else {
2584+
if (b < '0' || b > '9') numberError()
25852585
digits -= pos
25862586
while ((pos < tail || {
25872587
digits += pos

jsoniter-scala-core/jvm/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/core/JsonReader.scala

+8-8
Original file line numberDiff line numberDiff line change
@@ -2001,10 +2001,10 @@ final class JsonReader private[jsoniter_scala](
20012001
b = nextByte(head)
20022002
s = -1
20032003
}
2004-
if (b < '0' || b > '9') numberError()
20052004
var x = b - '0'
20062005
if (isToken && x == 0) ensureNotLeadingZero()
20072006
else {
2007+
if (b < '0' || b > '9') numberError()
20082008
var pos = head
20092009
var buf = this.buf
20102010
while ((pos < tail || {
@@ -2037,10 +2037,10 @@ final class JsonReader private[jsoniter_scala](
20372037
b = nextByte(head)
20382038
s = -1
20392039
}
2040-
if (b < '0' || b > '9') numberError()
20412040
var x = b - '0'
20422041
if (isToken && x == 0) ensureNotLeadingZero()
20432042
else {
2043+
if (b < '0' || b > '9') numberError()
20442044
var pos = head
20452045
var buf = this.buf
20462046
while ((pos < tail || {
@@ -2073,10 +2073,10 @@ final class JsonReader private[jsoniter_scala](
20732073
b = nextByte(head)
20742074
s = 0
20752075
}
2076-
if (b < '0' || b > '9') numberError()
20772076
var x = '0' - b
20782077
if (isToken && x == 0) ensureNotLeadingZero()
20792078
else {
2079+
if (b < '0' || b > '9') numberError()
20802080
var pos = head
20812081
var buf = this.buf
20822082
while ((pos < tail || {
@@ -2111,10 +2111,10 @@ final class JsonReader private[jsoniter_scala](
21112111
b = nextByte(head)
21122112
s = 0L
21132113
}
2114-
if (b < '0' || b > '9') numberError()
21152114
var x = ('0' - b).toLong
21162115
if (isToken && x == 0) ensureNotLeadingZero()
21172116
else {
2117+
if (b < '0' || b > '9') numberError()
21182118
var pos = head
21192119
var buf = this.buf
21202120
var dec = 0L
@@ -2178,7 +2178,6 @@ final class JsonReader private[jsoniter_scala](
21782178
b = nextByte(head)
21792179
isNeg = true
21802180
}
2181-
if (b < '0' || b > '9') numberError()
21822181
var pos = head
21832182
var buf = this.buf
21842183
val from = pos - 1
@@ -2200,6 +2199,7 @@ final class JsonReader private[jsoniter_scala](
22002199
b >= '0' && b <= '9'
22012200
}) leadingZeroError(pos - 1)
22022201
} else {
2202+
if (b < '0' || b > '9') numberError()
22032203
while ((pos < tail || {
22042204
pos = loadMore(pos)
22052205
buf = this.buf
@@ -2330,7 +2330,6 @@ final class JsonReader private[jsoniter_scala](
23302330
b = nextByte(head)
23312331
isNeg = true
23322332
}
2333-
if (b < '0' || b > '9') numberError()
23342333
var pos = head
23352334
var buf = this.buf
23362335
val from = pos - 1
@@ -2352,6 +2351,7 @@ final class JsonReader private[jsoniter_scala](
23522351
b >= '0' && b <= '9'
23532352
}) leadingZeroError(pos - 1)
23542353
} else {
2354+
if (b < '0' || b > '9') numberError()
23552355
while ((pos < tail || {
23562356
pos = loadMore(pos)
23572357
buf = this.buf
@@ -2483,11 +2483,11 @@ final class JsonReader private[jsoniter_scala](
24832483
b = nextByte(head)
24842484
s = -1
24852485
}
2486-
if (b < '0' || b > '9') numberError()
24872486
if (isToken && b == '0') {
24882487
ensureNotLeadingZero()
24892488
BigInt(0)
24902489
} else {
2490+
if (b < '0' || b > '9') numberError()
24912491
var pos = head
24922492
var buf = this.buf
24932493
var from = pos - 1
@@ -2542,7 +2542,6 @@ final class JsonReader private[jsoniter_scala](
25422542
b = nextByte(head)
25432543
s = -1
25442544
}
2545-
if (b < '0' || b > '9') numberError()
25462545
var pos = head
25472546
var buf = this.buf
25482547
var from = pos - 1
@@ -2562,6 +2561,7 @@ final class JsonReader private[jsoniter_scala](
25622561
b >= '0' && b <= '9'
25632562
}) leadingZeroError(pos - 1)
25642563
} else {
2564+
if (b < '0' || b > '9') numberError()
25652565
digits -= pos
25662566
var m, bs = 0L
25672567
while ((pos + 7 < tail || {

jsoniter-scala-core/native/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/core/JsonReader.scala

+8-8
Original file line numberDiff line numberDiff line change
@@ -2001,10 +2001,10 @@ final class JsonReader private[jsoniter_scala](
20012001
b = nextByte(head)
20022002
s = -1
20032003
}
2004-
if (b < '0' || b > '9') numberError()
20052004
var x = b - '0'
20062005
if (isToken && x == 0) ensureNotLeadingZero()
20072006
else {
2007+
if (b < '0' || b > '9') numberError()
20082008
var pos = head
20092009
var buf = this.buf
20102010
while ((pos < tail || {
@@ -2037,10 +2037,10 @@ final class JsonReader private[jsoniter_scala](
20372037
b = nextByte(head)
20382038
s = -1
20392039
}
2040-
if (b < '0' || b > '9') numberError()
20412040
var x = b - '0'
20422041
if (isToken && x == 0) ensureNotLeadingZero()
20432042
else {
2043+
if (b < '0' || b > '9') numberError()
20442044
var pos = head
20452045
var buf = this.buf
20462046
while ((pos < tail || {
@@ -2073,10 +2073,10 @@ final class JsonReader private[jsoniter_scala](
20732073
b = nextByte(head)
20742074
s = 0
20752075
}
2076-
if (b < '0' || b > '9') numberError()
20772076
var x = '0' - b
20782077
if (isToken && x == 0) ensureNotLeadingZero()
20792078
else {
2079+
if (b < '0' || b > '9') numberError()
20802080
var pos = head
20812081
var buf = this.buf
20822082
while ((pos < tail || {
@@ -2111,10 +2111,10 @@ final class JsonReader private[jsoniter_scala](
21112111
b = nextByte(head)
21122112
s = 0L
21132113
}
2114-
if (b < '0' || b > '9') numberError()
21152114
var x = ('0' - b).toLong
21162115
if (isToken && x == 0) ensureNotLeadingZero()
21172116
else {
2117+
if (b < '0' || b > '9') numberError()
21182118
var pos = head
21192119
var buf = this.buf
21202120
var dec = 0L
@@ -2178,7 +2178,6 @@ final class JsonReader private[jsoniter_scala](
21782178
b = nextByte(head)
21792179
isNeg = true
21802180
}
2181-
if (b < '0' || b > '9') numberError()
21822181
var pos = head
21832182
var buf = this.buf
21842183
val from = pos - 1
@@ -2200,6 +2199,7 @@ final class JsonReader private[jsoniter_scala](
22002199
b >= '0' && b <= '9'
22012200
}) leadingZeroError(pos - 1)
22022201
} else {
2202+
if (b < '0' || b > '9') numberError()
22032203
while ((pos < tail || {
22042204
pos = loadMore(pos)
22052205
buf = this.buf
@@ -2330,7 +2330,6 @@ final class JsonReader private[jsoniter_scala](
23302330
b = nextByte(head)
23312331
isNeg = true
23322332
}
2333-
if (b < '0' || b > '9') numberError()
23342333
var pos = head
23352334
var buf = this.buf
23362335
val from = pos - 1
@@ -2352,6 +2351,7 @@ final class JsonReader private[jsoniter_scala](
23522351
b >= '0' && b <= '9'
23532352
}) leadingZeroError(pos - 1)
23542353
} else {
2354+
if (b < '0' || b > '9') numberError()
23552355
while ((pos < tail || {
23562356
pos = loadMore(pos)
23572357
buf = this.buf
@@ -2480,11 +2480,11 @@ final class JsonReader private[jsoniter_scala](
24802480
b = nextByte(head)
24812481
s = -1
24822482
}
2483-
if (b < '0' || b > '9') numberError()
24842483
if (isToken && b == '0') {
24852484
ensureNotLeadingZero()
24862485
BigInt(0)
24872486
} else {
2487+
if (b < '0' || b > '9') numberError()
24882488
var pos = head
24892489
var buf = this.buf
24902490
var from = pos - 1
@@ -2539,7 +2539,6 @@ final class JsonReader private[jsoniter_scala](
25392539
b = nextByte(head)
25402540
s = -1
25412541
}
2542-
if (b < '0' || b > '9') numberError()
25432542
var pos = head
25442543
var buf = this.buf
25452544
var from = pos - 1
@@ -2559,6 +2558,7 @@ final class JsonReader private[jsoniter_scala](
25592558
b >= '0' && b <= '9'
25602559
}) leadingZeroError(pos - 1)
25612560
} else {
2561+
if (b < '0' || b > '9') numberError()
25622562
digits -= pos
25632563
var m, bs = 0L
25642564
while ((pos + 7 < tail || {

0 commit comments

Comments
 (0)