lib/fmt,strconv: char-literals for fmt/ftos magic decimals (Wave-1)

This commit is contained in:
2026-06-02 20:21:42 +09:00
parent fe32dedb08
commit 5987e389b9
5 changed files with 69 additions and 69 deletions

View File

@@ -2006,13 +2006,13 @@ fn encode_f_dec(d: *decimal, buf: []u8, out: i32) i32 = {
let i: i32 = lo;
for (i < hi) {
if (i == d.dp) {
buf[o] = 46u8; // '.'
buf[o] = '.';
o += 1i32;
};
if (0i32 <= i && i < (d.nd: i32)) {
buf[o] = (d.digits[i] + 48u8): u8;
} else {
buf[o] = 48u8; // '0'
buf[o] = '0';
};
o += 1i32;
i += 1i32;
@@ -2028,7 +2028,7 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
buf[o] = (d.digits[0] + 48u8): u8;
o += 1i32;
if ((d.nd: i32) > 1i32) {
buf[o] = 46u8; // '.'
buf[o] = '.';
o += 1i32;
};
let i: size = (1u64: size);
@@ -2037,12 +2037,12 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
o += 1i32;
i += (1u64: size);
};
buf[o] = 101u8; // 'e'
buf[o] = 'e';
o += 1i32;
let e: i32 = d.dp - 1i32;
if (e < 0i32) {
e = -e;
buf[o] = 45u8; // '-'
buf[o] = '-';
o += 1i32;
};
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
@@ -2095,7 +2095,7 @@ export fn f64tos(n: f64) str = {
return r;
};
if (sign) {
f64tos_buf[o] = 45u8; // '-'
f64tos_buf[o] = '-';
o += 1i32;
};
if (special) {
@@ -2104,7 +2104,7 @@ export fn f64tos(n: f64) str = {
return r;
};
if (exponent == 0u32 && mantissa == 0u64) {
f64tos_buf[o] = 48u8; // '0' (encode_zero, G/void/NONE)
f64tos_buf[o] = '0'; // encode_zero, G/void/NONE
o += 1i32;
r.len = o;
return r;
@@ -2123,7 +2123,7 @@ export fn f64tos(n: f64) str = {
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
trim(pd);
if (pd.nd == (0u64: size)) {
f64tos_buf[o] = 48u8; // rounded to zero
f64tos_buf[o] = '0'; // rounded to zero
o += 1i32;
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
o = encode_e_dec(pd, f64tos_buf[0:32], o);
@@ -2162,7 +2162,7 @@ export fn f32tos(n: f32) str = {
return r;
};
if (sign) {
f32tos_buf[o] = 45u8; // '-'
f32tos_buf[o] = '-';
o += 1i32;
};
if (special) {
@@ -2171,7 +2171,7 @@ export fn f32tos(n: f32) str = {
return r;
};
if (exponent == 0u32 && mantissa == 0u32) {
f32tos_buf[o] = 48u8; // '0' (encode_zero, G/void/NONE)
f32tos_buf[o] = '0'; // encode_zero, G/void/NONE
o += 1i32;
r.len = o;
return r;
@@ -2184,7 +2184,7 @@ export fn f32tos(n: f32) str = {
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
trim(pd);
if (pd.nd == (0u64: size)) {
f32tos_buf[o] = 48u8; // rounded to zero
f32tos_buf[o] = '0'; // rounded to zero
o += 1i32;
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
o = encode_e_dec(pd, f32tos_buf[0:32], o);