feat: stdlib daily APIs, macro tt/type paste, riscv64 cross smoke
ci / build (ubuntu) (push) Has been cancelled
ci / unit + fmt (push) Has been cancelled
ci / examples (push) Has been cancelled
ci / goldens + tools (push) Has been cancelled
ci / apps (push) Has been cancelled
ci / selfhost smoke (push) Has been cancelled
ci / macos smoke (push) Has been cancelled
ci / windows smoke (push) Has been cancelled
ci / CI gate (push) Has been cancelled
selfhost-loop / bootstrap determinism (push) Has been cancelled

Sessions 83–87: grow Array/Map/String/Test ergonomics; delimiter-balanced
and juxta :tt macros plus $t:type fragments; expression-level $(…),* in
templates; selfhost slice lits; riscv64/aarch64 cross smoke helper and
freestanding docs. Null-safe CBE type names and String_StartsWith.
This commit is contained in:
2026-07-27 21:40:11 +03:00
parent a785747c37
commit d60ce2bc3f
23 changed files with 1263 additions and 86 deletions
+16
View File
@@ -136,6 +136,9 @@ type
ekMacroCall ## name!(args) — expanded before sema
ekMacroStmt ## `$s:stmt` arg wrapper (expand only)
ekMacroPat ## `$p:pat` arg wrapper (expand only)
ekMacroTt ## `$x:tt` bound fragment (expand only; may flatten groups)
ekMacroRep ## `$( expr ),*` expression-level rep in templates (expand only)
ekMacroType ## `$t:type` bound type (expand only)
MatchArm* = object
loc*: SourceLocation
@@ -251,6 +254,18 @@ type
of ekMacroPat:
## Pattern fragment argument (`$p:pat`) — only during expand
exprMacroPat*: Pattern
of ekMacroTt:
## Bound `:tt` fragment. `exprMacroTtGroup` is true for parenthesized
## multi-element groups (parsed as tuples) — flattened when spliced as
## the sole argument of a call (`$f($args)` → `f(a, b)`).
exprMacroTtInner*: Expr
exprMacroTtGroup*: bool
of ekMacroRep:
## Expression-level `$( body ),*` / `$( body )*` in macro templates.
exprMacroRepBody*: Expr
of ekMacroType:
## Bound `:type` fragment.
exprMacroType*: TypeExpr
# ---------------------------------------------------------------------------
# Statements
@@ -385,6 +400,7 @@ type
mfkBlock ## block expression `{ … }`
mfkStmt ## one statement (let/if/… or expression-stmt)
mfkPat ## match/let pattern
mfkType ## type expression (`int`, `*int`, `String`, …)
MacroFragment* = object
name*: string ## primary / first name (compat)