lib: retire os.assert/abort shims — assert/abort are builtins (#58 respell)
The flat checker scope makes ANY decl named assert/abort anywhere in the combined unit disable the builtin unit-wide (the #45 shadow shape: scope_lookup_prefer's cross-module fallback finds it). lib carried three colliding @symbol("rt_abort") shims (os, time, strconv/stof) plus the os.assert wrapper, so a bare assert(cond) in ANY program importing os mis-bound os.assert and failed arity — a hard blocker for regex fold-5 (regex.ha:660/670 bring builtin-assert mass). Ruled respell-now per the recurrence test (#45 -> #58). Delete the shims and the os.assert wrapper; every bare abort(msg) caller (regex, strings, utf8, hash, getopt, encoding/*, time, stof) now lands on the builtin, and the ~40 os.assert(c, m) sites respell to the builtin assert(c, m) — restoring the exact Hare spelling the lib ports diverged from (e.g. ref/hare/bytes/tokenize.ha:23). os.assert had no Hare counterpart (Hare's assert is a language builtin); rule-9 wrapper removed. temp/dirs/bufio already use the non-colliding rtabort spelling and keep it. Now-dead 'import os;' lines kept (pre-existing precedent: lib/strconv/strconv.ww carries one); a tree-wide dead-import sweep is a separate concern. regex.ww's if+abort workarounds citing #58 stay for the fold-5 owner to fold back into assert. combined.ww regenerated for all five selfhost tools + the smoke fixture via make.
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
// (when no continue exists in the loop).
|
||||
// - Hare `fn foo() T = if (cond) {...} else expr;` expression body
|
||||
// → ww requires a `{}` block body throughout.
|
||||
// - Hare bare `assert(cond)` builtin → `os.assert(cond, msg)`;
|
||||
// - Hare bare `assert(cond)` builtin → `assert(cond, msg)`;
|
||||
// wwstage cgen has no `assert` intercept (deferred fold).
|
||||
// - In-file instances of the above hoist pattern: `i_sz` (line 93)
|
||||
// hoists a per-iteration size cast out of a for-loop comparison
|
||||
@@ -110,7 +110,7 @@ fn leftshift(d: *decimal, k: u32) void = {
|
||||
let SZ_BOUND: size = (len(d.digits): size);
|
||||
let kU64: u64 = (k: u64);
|
||||
let MAXSHIFT_U32: u32 = (maxshift: u32);
|
||||
os.assert(k <= MAXSHIFT_U32, "strconv.leftshift: k > maxshift");
|
||||
assert(k <= MAXSHIFT_U32, "strconv.leftshift: k > maxshift");
|
||||
if (d.nd == (0u64: size)) { return; };
|
||||
let nn: u32 = leftshift_newdigits(d, k);
|
||||
let r: int = (d.nd: int) - 1;
|
||||
|
||||
Reference in New Issue
Block a user