Skip to content

Commit 0e398c4

Browse files
authored
refactor: Rename dtoa/itoa_stream to dtoa/itoa_buffered & simplify them (#1339)
BREAKING CHANGE: The internal `dtoa/itoa_stream` helpers (unsafe `Number#toString`) in `util/number` have been renamed to `dtoa/itoa_buffered`, don't take a redundant offset argument anymore, and the underlying core implementation helpers are no longer exposed. Usage now is: `dtoa_buffered(buffer + byteOffset, value)`
1 parent e5bfe15 commit 0e398c4

File tree

9 files changed

+851
-847
lines changed

9 files changed

+851
-847
lines changed

Diff for: std/assembly/util/number.ts

+7-9
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ export function utoa32_dec_core(buffer: usize, num: u32, offset: usize): void {
290290

291291
// @ts-ignore: decorator
292292
@inline
293-
export function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void {
293+
function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void {
294294
if (ASC_SHRINK_LEVEL >= 1) {
295295
utoa_hex_simple<u32>(buffer, num, offset);
296296
} else {
@@ -300,7 +300,7 @@ export function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void {
300300

301301
// @ts-ignore: decorator
302302
@inline
303-
export function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void {
303+
function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void {
304304
if (ASC_SHRINK_LEVEL >= 1) {
305305
utoa_dec_simple<u64>(buffer, num, offset);
306306
} else {
@@ -310,15 +310,15 @@ export function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void {
310310

311311
// @ts-ignore: decorator
312312
@inline
313-
export function utoa64_hex_core(buffer: usize, num: u64, offset: usize): void {
313+
function utoa64_hex_core(buffer: usize, num: u64, offset: usize): void {
314314
if (ASC_SHRINK_LEVEL >= 1) {
315315
utoa_hex_simple<u64>(buffer, num, offset);
316316
} else {
317317
utoa_hex_lut(buffer, num, offset);
318318
}
319319
}
320320

321-
export function utoa64_any_core(buffer: usize, num: u64, offset: usize, radix: i32): void {
321+
function utoa64_any_core(buffer: usize, num: u64, offset: usize, radix: i32): void {
322322
const lut = changetype<usize>(ANY_DIGITS);
323323
var base = u64(radix);
324324
if ((radix & (radix - 1)) == 0) { // for radix which pow of two
@@ -710,7 +710,7 @@ function prettify(buffer: usize, length: i32, k: i32): i32 {
710710
}
711711
}
712712

713-
export function dtoa_core(buffer: usize, value: f64): i32 {
713+
function dtoa_core(buffer: usize, value: f64): i32 {
714714
var sign = i32(value < 0);
715715
if (sign) {
716716
value = -value;
@@ -736,8 +736,7 @@ export function dtoa(value: f64): String {
736736
return result;
737737
}
738738

739-
export function itoa_stream<T extends number>(buffer: usize, offset: usize, value: T): u32 {
740-
buffer += offset << 1;
739+
export function itoa_buffered<T extends number>(buffer: usize, value: T): u32 {
741740
var sign: u32 = 0;
742741
if (isSigned<T>()) {
743742
sign = u32(value < 0);
@@ -783,8 +782,7 @@ export function itoa_stream<T extends number>(buffer: usize, offset: usize, valu
783782
return decimals;
784783
}
785784

786-
export function dtoa_stream(buffer: usize, offset: usize, value: f64): u32 {
787-
buffer += offset << 1;
785+
export function dtoa_buffered(buffer: usize, value: f64): u32 {
788786
if (value == 0) {
789787
store<u16>(buffer, CharCode._0);
790788
store<u16>(buffer, CharCode.DOT, 2);

Diff for: std/assembly/util/string.ts

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { itoa32, utoa32, itoa64, utoa64, dtoa, itoa_stream, dtoa_stream, MAX_DOUBLE_LENGTH } from "./number";
1+
import { itoa32, utoa32, itoa64, utoa64, dtoa, itoa_buffered, dtoa_buffered, MAX_DOUBLE_LENGTH } from "./number";
22
import { ipow32 } from "../math";
33

44
// All tables are stored as two staged lookup tables (static tries)
@@ -889,7 +889,7 @@ export function joinIntegerArray<T>(dataStart: usize, length: i32, separator: st
889889
for (let i = 0; i < lastIndex; ++i) {
890890
value = load<T>(dataStart + (<usize>i << alignof<T>()));
891891
// @ts-ignore: type
892-
offset += itoa_stream<T>(changetype<usize>(result), offset, value);
892+
offset += itoa_buffered<T>(changetype<usize>(result) + (<usize>offset << 1), value);
893893
if (sepLen) {
894894
memory.copy(
895895
changetype<usize>(result) + (<usize>offset << 1),
@@ -901,7 +901,7 @@ export function joinIntegerArray<T>(dataStart: usize, length: i32, separator: st
901901
}
902902
value = load<T>(dataStart + (<usize>lastIndex << alignof<T>()));
903903
// @ts-ignore: type
904-
offset += itoa_stream<T>(changetype<usize>(result), offset, value);
904+
offset += itoa_buffered<T>(changetype<usize>(result) + (<usize>offset << 1), value);
905905
if (estLen > offset) return result.substring(0, offset);
906906
return result;
907907
}
@@ -924,10 +924,8 @@ export function joinFloatArray<T>(dataStart: usize, length: i32, separator: stri
924924
var value: T;
925925
for (let i = 0; i < lastIndex; ++i) {
926926
value = load<T>(dataStart + (<usize>i << alignof<T>()));
927-
offset += dtoa_stream(changetype<usize>(result), offset,
928-
// @ts-ignore: type
929-
value
930-
);
927+
// @ts-ignore: type
928+
offset += dtoa_buffered(changetype<usize>(result) + (<usize>offset << 1), value);
931929
if (sepLen) {
932930
memory.copy(
933931
changetype<usize>(result) + (<usize>offset << 1),
@@ -938,10 +936,8 @@ export function joinFloatArray<T>(dataStart: usize, length: i32, separator: stri
938936
}
939937
}
940938
value = load<T>(dataStart + (<usize>lastIndex << alignof<T>()));
941-
offset += dtoa_stream(changetype<usize>(result), offset,
942-
// @ts-ignore: type
943-
value
944-
);
939+
// @ts-ignore: type
940+
offset += dtoa_buffered(changetype<usize>(result) + (<usize>offset << 1), value);
945941
if (estLen > offset) return result.substring(0, offset);
946942
return result;
947943
}

Diff for: std/assembly/wasi/index.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
import {
99
MAX_DOUBLE_LENGTH,
1010
decimalCount32,
11-
dtoa_stream
11+
dtoa_buffered
1212
} from "util/number";
1313

1414
// @ts-ignore: decorator
@@ -81,19 +81,19 @@ function trace( // eslint-disable-line @typescript-eslint/no-unused-vars
8181
fd_write(2, iovPtr, 1, lenPtr);
8282
if (n) {
8383
store<u8>(bufPtr++, 0x20); // space
84-
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a0), bufPtr);
84+
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a0), bufPtr);
8585
fd_write(2, iovPtr, 1, lenPtr);
8686
if (n > 1) {
87-
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a1), bufPtr);
87+
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a1), bufPtr);
8888
fd_write(2, iovPtr, 1, lenPtr);
8989
if (n > 2) {
90-
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a2), bufPtr);
90+
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a2), bufPtr);
9191
fd_write(2, iovPtr, 1, lenPtr);
9292
if (n > 3) {
93-
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a3), bufPtr);
93+
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a3), bufPtr);
9494
fd_write(2, iovPtr, 1, lenPtr);
9595
if (n > 4) {
96-
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a4), bufPtr);
96+
changetype<iovec>(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a4), bufPtr);
9797
fd_write(2, iovPtr, 1, lenPtr);
9898
}
9999
}

0 commit comments

Comments
 (0)