lib/fmt,strconv: char-literals for fmt/ftos magic decimals (Wave-1)
This commit is contained in:
@@ -43,7 +43,7 @@ fn i64dec(v: i64) str = {
|
|||||||
if (n < 0) { neg = true; n = -n; };
|
if (n < 0) { neg = true; n = -n; };
|
||||||
let tmp: [20]u8;
|
let tmp: [20]u8;
|
||||||
let i: i32 = 0;
|
let i: i32 = 0;
|
||||||
if (n == 0) { tmp[0] = 48u8; i = 1; };
|
if (n == 0) { tmp[0] = '0'; i = 1; };
|
||||||
for (n > 0) {
|
for (n > 0) {
|
||||||
let d: i64 = n % 10i64;
|
let d: i64 = n % 10i64;
|
||||||
tmp[i] = (d + 48i64): u8;
|
tmp[i] = (d + 48i64): u8;
|
||||||
@@ -51,7 +51,7 @@ fn i64dec(v: i64) str = {
|
|||||||
i += 1;
|
i += 1;
|
||||||
};
|
};
|
||||||
let out: i32 = 0;
|
let out: i32 = 0;
|
||||||
if (neg) { i64dec_buf[out] = 45u8; out += 1; }; // '-'
|
if (neg) { i64dec_buf[out] = '-'; out += 1; };
|
||||||
for (i > 0) {
|
for (i > 0) {
|
||||||
i -= 1;
|
i -= 1;
|
||||||
i64dec_buf[out] = tmp[i];
|
i64dec_buf[out] = tmp[i];
|
||||||
@@ -186,7 +186,7 @@ fn scandigits(s: str, pos: *i32) i32 = {
|
|||||||
let any: bool = false;
|
let any: bool = false;
|
||||||
for (*pos < s.len) {
|
for (*pos < s.len) {
|
||||||
let c: u8 = s[*pos];
|
let c: u8 = s[*pos];
|
||||||
if (c < 48u8 || c > 57u8) {
|
if (c < '0' || c > '9') {
|
||||||
if (!any) { fmtabort(); };
|
if (!any) { fmtabort(); };
|
||||||
return v;
|
return v;
|
||||||
};
|
};
|
||||||
@@ -206,25 +206,25 @@ fn scanmods(s: str, pos: *i32, m: *mods) void = {
|
|||||||
m.pad = 32: rune; // ' ' — Hare iter.ha:130
|
m.pad = 32: rune; // ' ' — Hare iter.ha:130
|
||||||
for (*pos < s.len) {
|
for (*pos < s.len) {
|
||||||
let c: u8 = s[*pos];
|
let c: u8 = s[*pos];
|
||||||
if (c == 125u8) { return; }; // '}'
|
if (c == '}') { return; };
|
||||||
*pos += 1;
|
*pos += 1;
|
||||||
if (c == 45u8) { m.alignment = alignment.LEFT; } // '-'
|
if (c == '-') { m.alignment = alignment.LEFT; }
|
||||||
else if (c == 61u8) { m.alignment = alignment.CENTER; } // '='
|
else if (c == '=') { m.alignment = alignment.CENTER; }
|
||||||
else if (c == 95u8) { // '_'
|
else if (c == '_') {
|
||||||
if (*pos >= s.len) { fmtabort(); };
|
if (*pos >= s.len) { fmtabort(); };
|
||||||
m.pad = s[*pos]: rune;
|
m.pad = s[*pos]: rune;
|
||||||
*pos += 1;
|
*pos += 1;
|
||||||
}
|
}
|
||||||
else if (c == 32u8) { m.neg = neg.SPACE; } // ' '
|
else if (c == ' ') { m.neg = neg.SPACE; }
|
||||||
else if (c == 43u8) { m.neg = neg.PLUS; } // '+'
|
else if (c == '+') { m.neg = neg.PLUS; }
|
||||||
else if (c == 120u8) { m.base = strconv.base.HEX_LOWER; } // 'x'
|
else if (c == 'x') { m.base = strconv.base.HEX_LOWER; }
|
||||||
else if (c == 88u8) { m.base = strconv.base.HEX_UPPER; } // 'X'
|
else if (c == 'X') { m.base = strconv.base.HEX_UPPER; }
|
||||||
else if (c == 111u8) { m.base = strconv.base.OCT; } // 'o'
|
else if (c == 'o') { m.base = strconv.base.OCT; }
|
||||||
else if (c == 98u8) { m.base = strconv.base.BIN; } // 'b'
|
else if (c == 'b') { m.base = strconv.base.BIN; }
|
||||||
else if (c == 46u8) { // '.'
|
else if (c == '.') {
|
||||||
m.prec = scandigits(s, pos);
|
m.prec = scandigits(s, pos);
|
||||||
}
|
}
|
||||||
else if (c >= 49u8 && c <= 57u8) { // '1'..'9'
|
else if (c >= '1' && c <= '9') {
|
||||||
*pos -= 1;
|
*pos -= 1;
|
||||||
m.width = scandigits(s, pos);
|
m.width = scandigits(s, pos);
|
||||||
}
|
}
|
||||||
@@ -297,7 +297,7 @@ fn rawlenf64(v: f64, m: *mods) i32 = {
|
|||||||
let view: str = strconv.f64tos(v);
|
let view: str = strconv.f64tos(v);
|
||||||
let body: i32 = view.len;
|
let body: i32 = view.len;
|
||||||
let had_neg: bool = false;
|
let had_neg: bool = false;
|
||||||
if (body > 0 && view.ptr[0] == 45u8) {
|
if (body > 0 && view.ptr[0] == '-') {
|
||||||
had_neg = true;
|
had_neg = true;
|
||||||
body -= 1;
|
body -= 1;
|
||||||
};
|
};
|
||||||
@@ -348,7 +348,7 @@ fn formatraw(s: io.handle, arg: formattable, m: *mods) (size | io.error) = {
|
|||||||
let pi: i32 = 0;
|
let pi: i32 = 0;
|
||||||
for (pi < pad0) {
|
for (pi < pad0) {
|
||||||
let buf: [1]u8;
|
let buf: [1]u8;
|
||||||
buf[0] = 48u8; // '0'
|
buf[0] = '0';
|
||||||
let r: (size | io.error) = putbytes(s, &buf[0], 1);
|
let r: (size | io.error) = putbytes(s, &buf[0], 1);
|
||||||
match (r) {
|
match (r) {
|
||||||
case let n: size => { total += n; };
|
case let n: size => { total += n; };
|
||||||
@@ -385,7 +385,7 @@ fn formatraw(s: io.handle, arg: formattable, m: *mods) (size | io.error) = {
|
|||||||
// so this peel is a no-op for them.
|
// so this peel is a no-op for them.
|
||||||
let view: str = strconv.f64tos(v);
|
let view: str = strconv.f64tos(v);
|
||||||
let neg_flag: bool = false;
|
let neg_flag: bool = false;
|
||||||
if (view.len > 0 && view.ptr[0] == 45u8) { // '-'
|
if (view.len > 0 && view.ptr[0] == '-') {
|
||||||
neg_flag = true;
|
neg_flag = true;
|
||||||
view.ptr = view.ptr + 1u64;
|
view.ptr = view.ptr + 1u64;
|
||||||
view.len -= 1;
|
view.len -= 1;
|
||||||
@@ -529,10 +529,10 @@ export fn fprintf(s: io.handle, fmt: str, args: field...) (size | io.error) = {
|
|||||||
let checkunused: bool = true;
|
let checkunused: bool = true;
|
||||||
for (i < fmt.len) {
|
for (i < fmt.len) {
|
||||||
let c: u8 = fmt[i];
|
let c: u8 = fmt[i];
|
||||||
if (c == 123u8) { // '{'
|
if (c == '{') {
|
||||||
i += 1;
|
i += 1;
|
||||||
if (i >= fmt.len) { fmtabort(); };
|
if (i >= fmt.len) { fmtabort(); };
|
||||||
if (fmt[i] == 123u8) { // '{{' literal
|
if (fmt[i] == '{') { // '{{' literal
|
||||||
let r: (size | io.error) = putbytes(s, fmt.ptr + i: u64, 1);
|
let r: (size | io.error) = putbytes(s, fmt.ptr + i: u64, 1);
|
||||||
match (r) {
|
match (r) {
|
||||||
case let n: size => { total += n; };
|
case let n: size => { total += n; };
|
||||||
@@ -542,7 +542,7 @@ export fn fprintf(s: io.handle, fmt: str, args: field...) (size | io.error) = {
|
|||||||
} else {
|
} else {
|
||||||
let idx: i32 = 0;
|
let idx: i32 = 0;
|
||||||
let d: u8 = fmt[i];
|
let d: u8 = fmt[i];
|
||||||
if (d >= 48u8 && d <= 57u8) {
|
if (d >= '0' && d <= '9') {
|
||||||
checkunused = false;
|
checkunused = false;
|
||||||
idx = scandigits(fmt, &i);
|
idx = scandigits(fmt, &i);
|
||||||
} else {
|
} else {
|
||||||
@@ -551,11 +551,11 @@ export fn fprintf(s: io.handle, fmt: str, args: field...) (size | io.error) = {
|
|||||||
};
|
};
|
||||||
let m: mods;
|
let m: mods;
|
||||||
modsinit(&m);
|
modsinit(&m);
|
||||||
if (i < fmt.len && fmt[i] == 58u8) { // ':'
|
if (i < fmt.len && fmt[i] == ':') {
|
||||||
i += 1;
|
i += 1;
|
||||||
scanmods(fmt, &i, &m);
|
scanmods(fmt, &i, &m);
|
||||||
};
|
};
|
||||||
if (i >= fmt.len || fmt[i] != 125u8) { fmtabort(); };
|
if (i >= fmt.len || fmt[i] != '}') { fmtabort(); };
|
||||||
i += 1;
|
i += 1;
|
||||||
if (idx >= args.len) { fmtabort(); };
|
if (idx >= args.len) { fmtabort(); };
|
||||||
let r: (size | io.error) = formatfield(s, args[idx], &m);
|
let r: (size | io.error) = formatfield(s, args[idx], &m);
|
||||||
@@ -564,9 +564,9 @@ export fn fprintf(s: io.handle, fmt: str, args: field...) (size | io.error) = {
|
|||||||
case let e: io.error => return e;
|
case let e: io.error => return e;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} else if (c == 125u8) { // '}'
|
} else if (c == '}') {
|
||||||
i += 1;
|
i += 1;
|
||||||
if (i >= fmt.len || fmt[i] != 125u8) { fmtabort(); };
|
if (i >= fmt.len || fmt[i] != '}') { fmtabort(); };
|
||||||
let r: (size | io.error) = putbytes(s, fmt.ptr + i: u64, 1);
|
let r: (size | io.error) = putbytes(s, fmt.ptr + i: u64, 1);
|
||||||
match (r) {
|
match (r) {
|
||||||
case let n: size => { total += n; };
|
case let n: size => { total += n; };
|
||||||
|
|||||||
@@ -603,13 +603,13 @@ fn encode_f_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
let i: i32 = lo;
|
let i: i32 = lo;
|
||||||
for (i < hi) {
|
for (i < hi) {
|
||||||
if (i == d.dp) {
|
if (i == d.dp) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (0i32 <= i && i < (d.nd: i32)) {
|
if (0i32 <= i && i < (d.nd: i32)) {
|
||||||
buf[o] = (d.digits[i] + 48u8): u8;
|
buf[o] = (d.digits[i] + 48u8): u8;
|
||||||
} else {
|
} else {
|
||||||
buf[o] = 48u8; // '0'
|
buf[o] = '0';
|
||||||
};
|
};
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += 1i32;
|
i += 1i32;
|
||||||
@@ -625,7 +625,7 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
buf[o] = (d.digits[0] + 48u8): u8;
|
buf[o] = (d.digits[0] + 48u8): u8;
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
if ((d.nd: i32) > 1i32) {
|
if ((d.nd: i32) > 1i32) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
let i: size = (1u64: size);
|
let i: size = (1u64: size);
|
||||||
@@ -634,12 +634,12 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += (1u64: size);
|
i += (1u64: size);
|
||||||
};
|
};
|
||||||
buf[o] = 101u8; // 'e'
|
buf[o] = 'e';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
let e: i32 = d.dp - 1i32;
|
let e: i32 = d.dp - 1i32;
|
||||||
if (e < 0i32) {
|
if (e < 0i32) {
|
||||||
e = -e;
|
e = -e;
|
||||||
buf[o] = 45u8; // '-'
|
buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
||||||
@@ -692,7 +692,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f64tos_buf[o] = 45u8; // '-'
|
f64tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -701,7 +701,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u64) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -720,7 +720,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f64tos_buf[o] = 48u8; // rounded to zero
|
f64tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
||||||
@@ -759,7 +759,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f32tos_buf[o] = 45u8; // '-'
|
f32tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -768,7 +768,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u32) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -781,7 +781,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f32tos_buf[o] = 48u8; // rounded to zero
|
f32tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
||||||
|
|||||||
@@ -4053,13 +4053,13 @@ fn encode_f_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
let i: i32 = lo;
|
let i: i32 = lo;
|
||||||
for (i < hi) {
|
for (i < hi) {
|
||||||
if (i == d.dp) {
|
if (i == d.dp) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (0i32 <= i && i < (d.nd: i32)) {
|
if (0i32 <= i && i < (d.nd: i32)) {
|
||||||
buf[o] = (d.digits[i] + 48u8): u8;
|
buf[o] = (d.digits[i] + 48u8): u8;
|
||||||
} else {
|
} else {
|
||||||
buf[o] = 48u8; // '0'
|
buf[o] = '0';
|
||||||
};
|
};
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += 1i32;
|
i += 1i32;
|
||||||
@@ -4075,7 +4075,7 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
buf[o] = (d.digits[0] + 48u8): u8;
|
buf[o] = (d.digits[0] + 48u8): u8;
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
if ((d.nd: i32) > 1i32) {
|
if ((d.nd: i32) > 1i32) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
let i: size = (1u64: size);
|
let i: size = (1u64: size);
|
||||||
@@ -4084,12 +4084,12 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += (1u64: size);
|
i += (1u64: size);
|
||||||
};
|
};
|
||||||
buf[o] = 101u8; // 'e'
|
buf[o] = 'e';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
let e: i32 = d.dp - 1i32;
|
let e: i32 = d.dp - 1i32;
|
||||||
if (e < 0i32) {
|
if (e < 0i32) {
|
||||||
e = -e;
|
e = -e;
|
||||||
buf[o] = 45u8; // '-'
|
buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
||||||
@@ -4142,7 +4142,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f64tos_buf[o] = 45u8; // '-'
|
f64tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -4151,7 +4151,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u64) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -4170,7 +4170,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f64tos_buf[o] = 48u8; // rounded to zero
|
f64tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
||||||
@@ -4209,7 +4209,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f32tos_buf[o] = 45u8; // '-'
|
f32tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -4218,7 +4218,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u32) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -4231,7 +4231,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f32tos_buf[o] = 48u8; // rounded to zero
|
f32tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
||||||
|
|||||||
@@ -2006,13 +2006,13 @@ fn encode_f_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
let i: i32 = lo;
|
let i: i32 = lo;
|
||||||
for (i < hi) {
|
for (i < hi) {
|
||||||
if (i == d.dp) {
|
if (i == d.dp) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (0i32 <= i && i < (d.nd: i32)) {
|
if (0i32 <= i && i < (d.nd: i32)) {
|
||||||
buf[o] = (d.digits[i] + 48u8): u8;
|
buf[o] = (d.digits[i] + 48u8): u8;
|
||||||
} else {
|
} else {
|
||||||
buf[o] = 48u8; // '0'
|
buf[o] = '0';
|
||||||
};
|
};
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += 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;
|
buf[o] = (d.digits[0] + 48u8): u8;
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
if ((d.nd: i32) > 1i32) {
|
if ((d.nd: i32) > 1i32) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
let i: size = (1u64: size);
|
let i: size = (1u64: size);
|
||||||
@@ -2037,12 +2037,12 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += (1u64: size);
|
i += (1u64: size);
|
||||||
};
|
};
|
||||||
buf[o] = 101u8; // 'e'
|
buf[o] = 'e';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
let e: i32 = d.dp - 1i32;
|
let e: i32 = d.dp - 1i32;
|
||||||
if (e < 0i32) {
|
if (e < 0i32) {
|
||||||
e = -e;
|
e = -e;
|
||||||
buf[o] = 45u8; // '-'
|
buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
||||||
@@ -2095,7 +2095,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f64tos_buf[o] = 45u8; // '-'
|
f64tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -2104,7 +2104,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u64) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -2123,7 +2123,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f64tos_buf[o] = 48u8; // rounded to zero
|
f64tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
||||||
@@ -2162,7 +2162,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f32tos_buf[o] = 45u8; // '-'
|
f32tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -2171,7 +2171,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u32) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -2184,7 +2184,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f32tos_buf[o] = 48u8; // rounded to zero
|
f32tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
||||||
|
|||||||
@@ -2006,13 +2006,13 @@ fn encode_f_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
let i: i32 = lo;
|
let i: i32 = lo;
|
||||||
for (i < hi) {
|
for (i < hi) {
|
||||||
if (i == d.dp) {
|
if (i == d.dp) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (0i32 <= i && i < (d.nd: i32)) {
|
if (0i32 <= i && i < (d.nd: i32)) {
|
||||||
buf[o] = (d.digits[i] + 48u8): u8;
|
buf[o] = (d.digits[i] + 48u8): u8;
|
||||||
} else {
|
} else {
|
||||||
buf[o] = 48u8; // '0'
|
buf[o] = '0';
|
||||||
};
|
};
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += 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;
|
buf[o] = (d.digits[0] + 48u8): u8;
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
if ((d.nd: i32) > 1i32) {
|
if ((d.nd: i32) > 1i32) {
|
||||||
buf[o] = 46u8; // '.'
|
buf[o] = '.';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
let i: size = (1u64: size);
|
let i: size = (1u64: size);
|
||||||
@@ -2037,12 +2037,12 @@ fn encode_e_dec(d: *decimal, buf: []u8, out: i32) i32 = {
|
|||||||
o += 1i32;
|
o += 1i32;
|
||||||
i += (1u64: size);
|
i += (1u64: size);
|
||||||
};
|
};
|
||||||
buf[o] = 101u8; // 'e'
|
buf[o] = 'e';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
let e: i32 = d.dp - 1i32;
|
let e: i32 = d.dp - 1i32;
|
||||||
if (e < 0i32) {
|
if (e < 0i32) {
|
||||||
e = -e;
|
e = -e;
|
||||||
buf[o] = 45u8; // '-'
|
buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
// Hoisted uint casts (ww parser rejects `(N: uint)` inside `[ ]`).
|
||||||
@@ -2095,7 +2095,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f64tos_buf[o] = 45u8; // '-'
|
f64tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -2104,7 +2104,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u64) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -2123,7 +2123,7 @@ export fn f64tos(n: f64) str = {
|
|||||||
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
// fallback (ftos.ha:365). f == G → trim (ftos.ha:386).
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f64tos_buf[o] = 48u8; // rounded to zero
|
f64tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
o = encode_e_dec(pd, f64tos_buf[0:32], o);
|
||||||
@@ -2162,7 +2162,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (sign) {
|
if (sign) {
|
||||||
f32tos_buf[o] = 45u8; // '-'
|
f32tos_buf[o] = '-';
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
};
|
};
|
||||||
if (special) {
|
if (special) {
|
||||||
@@ -2171,7 +2171,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
if (exponent == 0u32 && mantissa == 0u32) {
|
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;
|
o += 1i32;
|
||||||
r.len = o;
|
r.len = o;
|
||||||
return r;
|
return r;
|
||||||
@@ -2184,7 +2184,7 @@ export fn f32tos(n: f32) str = {
|
|||||||
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
init_dec_mant_exp(pd, (dd.mantissa: u64), (dd.exponent: i32));
|
||||||
trim(pd);
|
trim(pd);
|
||||||
if (pd.nd == (0u64: size)) {
|
if (pd.nd == (0u64: size)) {
|
||||||
f32tos_buf[o] = 48u8; // rounded to zero
|
f32tos_buf[o] = '0'; // rounded to zero
|
||||||
o += 1i32;
|
o += 1i32;
|
||||||
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
} else if (pd.dp < -1i32 || (pd.dp - (pd.nd: i32)) > 2i32) {
|
||||||
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
o = encode_e_dec(pd, f32tos_buf[0:32], o);
|
||||||
|
|||||||
Reference in New Issue
Block a user