feat(cli): ludic build --check / ludicc --check - check without building

The parse, the types and the module rules (export, uses, layers, ports,
registries) run and nothing is emitted or linked: about three seconds
on Maroon Lake. In this mode the checker asks vis_check at each
reference it resolves, with a global's initializer and a registry's
entries seen from the files the emitter would use. Reseed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-25 13:13:42 +03:00
parent 7ef6c7ec75
commit 8892f51096
12 changed files with 15546 additions and 14721 deletions

View file

@ -152,6 +152,7 @@ entry {
else if a == "--fmt" { fmt = true }
else if a == "--save-temps" { save = true }
else if a == "--run" { run = true }
else if a == "--check" { g_check_only = true } # parse, type, module and port checks; nothing emitted
else if a == "--coverage" { g_coverage = true }
else if a == "--target" { ai += 1; if ai < arg_count() { target = arg(ai) } }
else if a == "--gui" { gui = true }
@ -207,6 +208,7 @@ entry {
check_duplicate_fns() # two declarations of one name: the cause, before its symptoms
check_duplicate_decls()
check_program() # L4: the types agree before anything is emitted
if g_check_only { exit(0) } # --check: the checks are all there is
emit_program()
deps_flush() # LUDIC_DEPS=<file>: the module graph (ludic deps)