Skip to content

Commit 367474d

Browse files
mkustermannCommit Queue
authored andcommitted
[dart2wasm] Use +s instead of parseFloat in json decoder
This addresses a comment left on [0]. [0] https://dart-review.googlesource.com/c/sdk/+/410320 Change-Id: I095ac6a1316cae46a6779ebdc71ed53c5bce3038 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416200 Commit-Queue: Martin Kustermann <[email protected]> Reviewed-by: Ömer Ağacan <[email protected]>
1 parent f1d81e3 commit 367474d

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

sdk/lib/_internal/wasm/lib/convert_patch.dart

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ class _NumberBuffer {
298298
// not only working on strings, but also on char-code lists, without losing
299299
// performance.
300300
num parseNum() => num.parse(getString());
301-
double parseDouble() => _jsParseFloat(getString());
301+
double parseDouble() => _jsParseValidFloat(getString());
302302
}
303303

304304
/**
@@ -697,7 +697,9 @@ mixin _ChunkedJsonParser<T> on _ChunkedJsonParserState {
697697
* built exactly during parsing.
698698
*/
699699
double parseDouble(int start, int end) {
700-
return _jsParseFloat(getString(start, end, 0x7f, _emptyCodeUnitsCache));
700+
return _jsParseValidFloat(
701+
getString(start, end, 0x7f, _emptyCodeUnitsCache),
702+
);
701703
}
702704

703705
/**
@@ -1752,7 +1754,9 @@ class _JSStringImplParser extends _ChunkedJsonParserState
17521754
}
17531755

17541756
double parseDouble(int start, int end) {
1755-
return _jsParseFloat(getString(start, end, 0x7f, _emptyCodeUnitsCache));
1757+
return _jsParseValidFloat(
1758+
getString(start, end, 0x7f, _emptyCodeUnitsCache),
1759+
);
17561760
}
17571761

17581762
void close() {
@@ -2038,7 +2042,7 @@ class _JsonUtf8Parser extends _ChunkedJsonParserState
20382042
chunk.offsetInElements + start,
20392043
chunk.offsetInElements + end,
20402044
);
2041-
return _jsParseFloat(result);
2045+
return _jsParseValidFloat(result);
20422046
}
20432047
}
20442048

@@ -2862,10 +2866,10 @@ WasmArray<WasmI8> _makeI8ArrayFromWasmI8ArrayBase(
28622866
return bytes;
28632867
}
28642868

2865-
double _jsParseFloat(String string) => JS<double>(
2866-
'(s) => parseFloat(s)',
2867-
jsStringFromDartString(string).toExternRef,
2868-
);
2869+
// Assumes the given [string] is a valid float, so it can rely on the implicit
2870+
// string to number conversion in JS using `+<string-of-number>`.
2871+
double _jsParseValidFloat(String string) =>
2872+
JS<double>('(s) => +s', jsStringFromDartString(string).toExternRef);
28692873

28702874
const ImmutableWasmArray<BoxedInt> _intBoxes256 = ImmutableWasmArray.literal([
28712875
0, 1, 2, 3, 4, 5, 6, 7, //

0 commit comments

Comments
 (0)