feat: bux test runner, bitwise-not parsing, stdlib discovery hardening\n\n- Add 'bux test' runner: discovers tests/*.bux, builds each in a temp package, runs and reports PASS/FAIL.\n- Fix unary ~ parsing and C emission in self-hosted compiler.\n- Harden stdlib discovery (require Fs.bux, avoid system /lib) and lstat in directory traversal.\n- Selfhost loop passes: buxc2 builds src/ and produces identical C output + stripped binary.\n- Update PLAN.md with completed milestones.
This commit is contained in:
+10
-2
@@ -733,8 +733,8 @@ func parserParseUnary(p: *Parser) -> *Expr {
|
||||
let col: uint32 = tok.column;
|
||||
let kind: int = tok.kind;
|
||||
|
||||
// -expr, !expr, *expr, &expr
|
||||
if kind == tkMinus || kind == tkBang || kind == tkStar || kind == tkAmp {
|
||||
// -expr, !expr, ~expr, *expr, &expr
|
||||
if kind == tkMinus || kind == tkBang || kind == tkTilde || kind == tkStar || kind == tkAmp {
|
||||
discard parserAdvance(p);
|
||||
let e: *Expr = parserMakeExpr(ekUnary, line, col);
|
||||
e.intValue = kind;
|
||||
@@ -1611,6 +1611,14 @@ func parserParseDecl(p: *Parser) -> *Decl {
|
||||
d.isRelease = isRelease;
|
||||
return d;
|
||||
}
|
||||
if kind == tkConst && parserPeek(p, 1) == tkFunc {
|
||||
discard parserAdvance(p); // const
|
||||
let d: *Decl = parserParseFuncDecl(p, isPublic, false, false);
|
||||
d.isConst = 1;
|
||||
d.isChecked = isChecked;
|
||||
d.isRelease = isRelease;
|
||||
return d;
|
||||
}
|
||||
if kind == tkFunc {
|
||||
let d: *Decl = parserParseFuncDecl(p, isPublic, false, false);
|
||||
d.isChecked = isChecked;
|
||||
|
||||
Reference in New Issue
Block a user