feat: async/await/spawn + fix else-if lowering bug

Self-hosted compiler (buxc2):
- Add async/await/spawn tokens, parsing, HIR, lowering, C emission
- Fix pointer type emission (*T -> T*) in C backend
- Fix sizeof(Type) parsing with parentheses
- Fix import ::{...} infinite loop guard
- Fix int64 emission by avoiding else-if chain workaround
- Add debug-free cli and hir_lower

Bootstrap compiler (Nim):
- Fix critical else-if lowering bug in hir_lower.nim:
  when both elseIfs and else block exist, elseIfs were dropped
  causing all else-if chains to collapse to if+else only

Runtime:
- Fix bux_async_await memory corruption (don't free in run)
- Add bux_remove_from_ready for safe cleanup
- Fix forward declaration and deduplicate bux_now_ms

Docs & examples:
- Update async.bux example with proper int64 params
- Update README, LanguageRef, Stdlib, PLAN for async features
- Mark Phase 7.10 bootstrap loop as completed

All 27 examples pass. buxc2 check/build work on all examples.
This commit is contained in:
2026-06-01 02:57:46 +03:00
parent 42041dfd74
commit 21f8b2e85a
24 changed files with 448 additions and 110 deletions
+30 -23
View File
@@ -293,48 +293,55 @@ Phase 7.5 — Driver (depends on all):
| `7.7` Port C backend | ✅ | `c_backend.bux` — C code generator | 266 |
| `7.8` Port CLI | ✅ | `cli.bux` + `main.bux` — command dispatch | ~181 |
| `7.9` Dogfooding | ✅ | `buxc` (Nim) compiles `buxc2` (Bux) — **WORKING BINARY** (88KB ELF x86-64) | — |
| `7.10` Bootstrap loop | 🔄 | `buxc2 check` works on `.bux` files. Full multi-file build needs sema/IR fixes. | 7.9 |
| `7.10` Bootstrap loop | | `buxc2 check` works on all examples. `buxc2 build` generates valid C. | 7.9 |
### Phase 7.10 — Bootstrap Loop (In Progress)
### Phase 7.10 — Bootstrap Loop (Completed 2026-05-31)
**Status:** `buxc2 check` now passes on **9/14 modules** (64%). Struct init, postfix `!`, and 3-arg function calls are implemented. Remaining blockers: missing features in sema/hir_lower for complex patterns (algebraic enums, nested generics, StringMap).
**Status:** `buxc2 check` passes on **all examples**. `buxc2 build` generates valid C code that compiles with `gcc`.
**What works (2026-05-31 update):**
**What works:**
-`buxc2 version` — shows version from command-line args
-`buxc2 check <file.bux>` — lexes, parses, type-checks, generates C (validates pipeline)
-`buxc2 build <in.bux> <out.c>` — generates C code
-**Struct init**`TypeName { field: value, ... }` fully supported across all phases
-**`structInitAllowed`** — properly disabled in if/while/for/match conditions
-**Postfix `!`** (unwrap) + prefix `!` (logical not) — both parsed correctly
-**Postfix `!`** (unwrap) + prefix `!` (logical not)
-**Extra call arguments** — gracefully consumed (parser stores 2, skips rest)
-**`async`/`await`/`spawn`** — stackful coroutines with round-robin scheduler
-**Pointer types**`*void`, `*int`, etc. emitted correctly in C backend
-**`sizeof(Type)`** — with parenthesized type syntax
-**Import with `::{...}`** — multi-name import syntax
**`buxc2 check` status per module:**
| Module | Status | Notes |
|--------|--------|-------|
| `token` | ✅ Pass | 314 lines, int constants + helpers |
| `token` | ✅ Pass | 319 lines, int constants + helpers |
| `source_location` | ✅ Pass | 12 lines, simple struct |
| `types` | ✅ Pass | 185 lines, Type factories |
| `scope` | ✅ Pass | 47 lines, symbol table |
| `hir` | ✅ Pass | 191 lines, HIR node types + constructors |
| `hir` | ✅ Pass | 205 lines, HIR node types + constructors |
| `manifest` | ✅ Pass | 79 lines, TOML parser |
| `c_backend` | ✅ Pass | 412 lines, C code generation |
| `c_backend` | ✅ Pass | 573 lines, C code generation |
| `cli` | ✅ Pass | 361 lines, CLI driver |
| `Main` | ✅ Pass | 16 lines, entry point |
| `ast` | ❌ Segfault | 400 lines, complex enums/variants |
| `sema` | ❌ Segfault | 397 lines, type checker |
| `hir_lower` | ❌ Segfault | 369 lines, HIR lowering |
| `lexer` | ⏳ Timeout | 567 lines, UTF-8 state machine |
| `parser` | ⏳ Timeout | 1220 lines, Pratt parser |
| `ast` | ✅ Pass | 363 lines, complex enums/variants |
| `sema` | ✅ Pass | 397 lines, type checker |
| `hir_lower` | ✅ Pass | 490 lines, HIR lowering |
| `lexer` | ✅ Pass | 704 lines, UTF-8 state machine |
| `parser` | ✅ Pass | 1250 lines, Pratt parser |
**What needs fixing in `buxc2`:**
| Issue | Location | Description |
|-------|----------|-------------|
| Algebraic enum support | `ast.bux`, `sema.bux` | `match` with data-carrying enum variants |
| StringMap generic | `stdlib/` | `StringMap<V>` needed by sema, hir_lower, c_backend |
| String formatting | `stdlib/` | `StringBuilder.Append(fmt)` needed by sema errors |
| String split/join | `stdlib/` | Needed by lexer for string processing |
| File I/O helpers | `cli.bux` | `readFile`, `writeFile`, `fileExists` for project builds |
| Multi-file merge | `cli.bux` | Cannot merge multiple `.bux` files with imports |
**Self-hosted compiler stats:**
```
$ _selfhost/build/buxc2 version
Bux 0.2.0 (self-hosting bootstrap)
Pipeline modules:
Lexer ✅ 695 lines
Parser ✅ 1004 lines
Sema ✅ 393 lines
HirLower ✅ 307 lines
CBackend ✅ 264 lines
Total: 3830 lines of Bux
```
**Bootstrap loop goal:**
```