Skip to content

Commit 5bc1708

Browse files
author
Ruben Bridgewater
committed
Improve number parsing
1 parent 3061e85 commit 5bc1708

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

lib/parser.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,25 @@ var ReplyError = require('./replyError')
88
* @param parser
99
* @returns {*}
1010
*/
11-
function parseSimpleString (parser) {
11+
function parseSimpleNumbers (parser) {
1212
var offset = parser.offset
1313
var length = parser.buffer.length
1414
var string = ''
15+
var c1 = parser.buffer[offset++]
16+
17+
if (c1 === 45) {
18+
string += '-'
19+
} else {
20+
string += c1 - 48
21+
}
1522

1623
while (offset < length) {
17-
var c1 = parser.buffer[offset++]
24+
c1 = parser.buffer[offset++]
1825
if (c1 === 13 && parser.buffer[offset] === 10) { // \r\n
1926
parser.offset = offset + 1
2027
return string
2128
}
22-
string += String.fromCharCode(c1)
29+
string += c1 - 48
2330
}
2431
}
2532

@@ -61,12 +68,12 @@ function parseSimpleStringViaOffset (parser) {
6168
}
6269

6370
/**
64-
* Returns the string length via parseSimpleString
71+
* Returns the string length via parseSimpleNumbers
6572
* @param parser
6673
* @returns {*}
6774
*/
6875
function parseLength (parser) {
69-
var string = parseSimpleString(parser)
76+
var string = parseSimpleNumbers(parser)
7077
if (string !== undefined) {
7178
return +string
7279
}
@@ -78,7 +85,7 @@ function parseLength (parser) {
7885
* @returns {*}
7986
*/
8087
function parseInteger (parser) {
81-
var string = parseSimpleString(parser)
88+
var string = parseSimpleNumbers(parser)
8289
if (string !== undefined) {
8390
// If stringNumbers is activated the parser always returns numbers as string
8491
// This is important for big numbers (number > Math.pow(2, 53)) as js numbers

0 commit comments

Comments
 (0)