dimgigov
194d70173c
feat: keyword-as-identifier, hFieldPtr/hSizeOf handling, skip forward decl bodies
2026-05-31 21:35:34 +03:00
dimgigov
27b3db5091
feat: keyword-as-identifier, C struct defs with forward decls, field4-7 in HIR
2026-05-31 21:28:40 +03:00
dimgigov
646c1cad28
feat: while/loop, array indexing (hIndexPtr/hAssign/hLoad), hAssign for assignment expressions
2026-05-31 21:10:17 +03:00
dimgigov
0ae4424bbc
fix: null literal emits 0 in C backend — minimal project builds successfully
2026-05-31 21:05:42 +03:00
dimgigov
e2c1a21059
fix: pointer type names in let/cast/params (String*), cast uses actual target type
2026-05-31 21:01:39 +03:00
dimgigov
1495b24a9e
fix: C codegen improvements - typedefs, forward decls, runtime decls, null-safe runtime
2026-05-31 20:55:05 +03:00
dimgigov
48ee40e7c5
feat: struct init in all phases, 9/14 modules pass check
2026-05-31 20:21:20 +03:00
dimgigov
35b856bab4
Phase 7.10: buxc2 now compiles multi-statement Bux programs
...
Parser (src_bux/parser.bux):
- Block stores statements as linked list (firstStmt/lastStmt/nextStmt)
- Block struct: added firstStmt, lastStmt fields
- Stmt struct: added nextStmt field
HIR Lowering (src_bux/hir_lower.bux):
- Lcx_LowerBlock: iterates statement linked list, chains HirNodes via child3
- hIf: else block stored in extraData (child3 reserved for block chaining)
C Backend (src_bux/c_backend.bux):
- hBlock: emits statements via child3 linked list with proper indentation
- hStore: combines alloca + value into single declaration (int x = value;)
- hIf: full if/else emission with proper newlines
- Function decl: proper return types and parameter types (not just "int")
- int main() wrapper: generated when Main function exists
- No duplicate return 0 when body already has return
Tested:
- buxc2 compiles hello world program → runs correctly
- buxc2 compiles multi-statement program (let, if, function calls) → runs correctly
- All 18 examples still pass, all unit tests pass
2026-05-31 17:25:03 +03:00
dimgigov
cb256397bd
Phase 7.9: Self-hosted compiler buxc2 builds and runs! 🎉
...
buxc (Nim bootstrap) successfully compiles buxc2 (Bux self-hosted compiler)
into a working 88KB ELF x86-64 binary.
Compiler fixes (Nim):
- duplicate symbol: user funcs shadow stdlib funcs via mergeDecls()
- forward declarations: func without body + definition (both orderings)
- extern func dedup: same extern in multiple files
- discard keyword: new language keyword, lowered to expr stmt or no-op
- parser: keywords as field names + advance-on-error safeguard
- parser: var without initializer (zero-init)
- parser: multi-line || && continuation expressions
- parser: else-if chain newline handling
- C backend: const declarations emitted as #define
- C backend: load(field_ptr) → base.field optimization (fixes lvalue errors)
Source fixes (src_bux/*.bux):
- types.bux: tk* → ty* prefix for type kind constants (avoid token conflict)
- sema.bux: remaining tk* → ty* references, StringMap → *void workaround
- hir_lower.bux: ekReturn removed, Lcx_LowerParam helper, *f dereference
- c_backend.bux: &mod.funcs[i] for pointer passing
- cli.bux: ReadFile/WriteFile → bux_read_file/bux_write_file wrappers
- parser.bux: pathStr.len → String_Len(pathStr)
- types.bux: "*" + x → String_Concat("*", x)
Build system:
- Makefile: added 4 missing examples + selfhost target
- PLAN.md: updated with actual project state, Phase 7.9 marked complete
All 18 examples pass, all unit tests pass.
2026-05-31 16:34:36 +03:00
dimgigov
679d406690
fix: c_backend.bux else-if replaced with if chain — all 14 files now parse
2026-05-31 14:28:59 +03:00
dimgigov
de6e89e3df
Phase 7.9: multi-file build, module braces, struct init multi-line, else-if fix
2026-05-31 14:25:57 +03:00
dimgigov
f4de065160
fix: module syntax — changed src_bux/*.bux from module X; to module X { ... }
2026-05-31 14:14:42 +03:00
dimgigov
6ee6b3b529
Phase 7: Self-hosting compiler — all 13 modules ported to Bux (3981 LOC)
2026-05-31 13:29:14 +03:00