C bootstrap (phases 0-9):
cmd/wwc, cmd/6c, cmd/6a, cmd/6l, cmd/ww, rt, lib/*.
ww-side self-host (phase 10):
selfhost/cmd/wwc — ww-cgen frontend; bootstrap fixed point.
selfhost/cmd/6a — assembler; byte-identical to C 6a (test 991).
selfhost/cmd/6l — linker w/ archive (.a) support; byte-identical
to C 6l (test 992).
selfhost/cmd/ww — driver (build/run/version); byte-identical to
C ww (test 993).
make test: 15/15. make bootstrap: ww2.s == ww3.s, ww2.o == ww3.o,
ww2 == ww3 byte-identical, with the full ww-tooled chain.
38 lines
813 B
Plaintext
38 lines
813 B
Plaintext
// selfhost/cmd/wwc/err.ww — port of cmd/wwc/err.c.
|
|
//
|
|
// Diagnostics. Plan 9 style: short, no levels beyond fatal/error/warn.
|
|
// Output goes through os.write so we don't pull in libc stdio.
|
|
|
|
use os;
|
|
use fmt;
|
|
|
|
type pos = struct {
|
|
file: str,
|
|
line: i32,
|
|
col: i32,
|
|
};
|
|
|
|
let nerrors: i32 = 0;
|
|
let nwarnings: i32 = 0;
|
|
|
|
export fn fatal(msg: str) void = {
|
|
fmt.errln(msg);
|
|
os.exit(1);
|
|
};
|
|
|
|
export fn errorf(p: pos, msg: str) void = {
|
|
os.write(2, p.file.ptr, p.file.len: u64);
|
|
os.write(2, ": error: ".ptr, 9u64);
|
|
os.write(2, msg.ptr, msg.len: u64);
|
|
os.write(2, "\n".ptr, 1u64);
|
|
nerrors += 1;
|
|
};
|
|
|
|
export fn warnf(p: pos, msg: str) void = {
|
|
os.write(2, p.file.ptr, p.file.len: u64);
|
|
os.write(2, ": warning: ".ptr, 11u64);
|
|
os.write(2, msg.ptr, msg.len: u64);
|
|
os.write(2, "\n".ptr, 1u64);
|
|
nwarnings += 1;
|
|
};
|