The parser now requires a newline or ';' between statements (block() in selfhost/parse.ludic); two statements may no longer sit adjacent with only spaces. Also fixed if-without-else swallowing its trailing separator. Migration: tools/ludic-tools/migrate_separators.c inserts ';' at statement boundaries corpus-wide (examples, runtime, 25 self-host fragments, ~1100 boundaries). Verified semantically identical — the migrated compiler compiles itself to IR byte-identical to the pre-migration seed, and every golden game renders identically. Reseeded to the strict compiler; C-free fixpoint holds; test.sh 14/14. Docs: Rule B documented in LANGUAGE.md; BOOTSTRAP.md R1 + stale fences updated; check-docs green across all docs. Fixed a multi-line string literal in emit_expr.ludic (byte-identical \n escape) that the C toolchain lexer mis-lexes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
16 lines
451 B
Text
16 lines
451 B
Text
game T {
|
|
fn classify(c: int) -> int {
|
|
match c { 65, 66 => { return 1 }; 67 => { return 2 }; _ => { return 9 } }
|
|
return 0
|
|
}
|
|
main {
|
|
print_int(classify(65)) # 1
|
|
print_int(classify(67)) # 2
|
|
print_int(classify(90)) # 9
|
|
print_int(shl(1, 4)) # 16
|
|
print_int(band(bor(4, 1), 6)) # 4
|
|
let p = mem_alloc(16)
|
|
poke32(p, 1, 9999)
|
|
print_int(peek32(p, 1)) # 9999
|
|
}
|
|
}
|