log-watcher diagnostics 129 -> 55 (json is what is left: 13 encode sites,
3 `as` parses and their cascade). corpus 71/0, woc 565/0, wovm gates green.
- runtime/src/sysio.c (new): 17 builtins behind the reserved module names —
fs.exists/list/stat/read_all/read_at/append, time.sleep/local/iso,
env.get/stopping, net.listen/accept/read/write/close, proc.run. Thin
blocking libc calls; a failed syscall traps the new WO_T_IO with errno's
own message, which `try ... catch` is how a program handles
- record-returning members (fs.stat, time.local, proc.run) take their
result record's CLASS ID as the last argument, so the VM allocates what
it fills without knowing any source type name (the err_fill pattern)
- absence is the zero word: a missing path from fs.stat and an unset
env.get are nil, not traps
- env.stopping installs SIGTERM/SIGINT handlers on first use only
- types.ml: predeclared Stat/TimeParts/Proc records (field order is the
contract with sysio.c) + the stdlib member table (arity, builtin id,
return type, result record) + stdlib return types in confident_typ
- emit.ml: stdlib member calls lower to their builtin with the record class
id appended; WO-E406 now means "no such member", not "not linked";
predeclared records enter the class table only when a program needs them
- emit.ml: fstate carries the method's declared return type, so a tail
`return []` / `return {}` gets its element kinds; a non-empty list literal
falls back to its own element type when there is no declared destination
- types.ml: confident_typ chases a container read (`c[i]`), which is what
makes a switch over a value pulled out of a map resolve; a void `try` arm
no longer demands its catch arm agree
- corpus: lang-use-stdlib-not-linked now pins WO-E406 for an unknown MEMBER
(fs.slurp) — the "not linked" premise is gone now that fs is linked
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
14 lines
645 B
Text
14 lines
645 B
Text
-- haxe-parity Task 1 (modules) + systems stdlib: `fs` is a reserved
|
|
-- stdlib namespace, so `use fs` resolves and a qualified call through it
|
|
-- typechecks without any module-level complaint (no E207/E225). What
|
|
-- WO-E406 now marks is the one thing left that a reserved namespace
|
|
-- cannot answer: a member it does not have. `fs.stat`/`fs.read_all`/...
|
|
-- are linked (runtime/src/sysio.c); `fs.slurp` is not any member of any
|
|
-- version of `fs`, and saying so at the call site is the whole point of
|
|
-- keeping a dedicated code for it rather than a generic WO-E403
|
|
-- "cannot resolve the receiver".
|
|
use fs
|
|
|
|
fn main() {
|
|
print(fs.slurp("x"))
|
|
}
|