fix(migrate): 0.R4 - --prune keeps a state declared after a plain parameter; a parameter named twice is refused

On Maroon Lake the prune gave home_keep_records(base_app_st, home_st, r: RunRecords, save_app_st) a
second save_app_st at the front, and every call a second argument: a state declared after a plain
parameter was not counted as declared. It is now, and a call to such a function is never given the
state again. `ludic build --check` let the duplicate through and clang refused it; the checker now
refuses a function that names two parameters alike (`add names two parameters n`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-26 05:32:08 +03:00
parent 71735b10a2
commit c35481f344
8 changed files with 47291 additions and 46599 deletions

View file

@ -154,12 +154,26 @@ function ck_stmt(s: Node) -> void {
}
ck_walk(s)
}
# a name given to two parameters: the second would shadow the first, and nothing could reach it
function ck_param_twice(d: Node, i: int) -> void {
var j = 0
while j < i {
if d.kids[j].kind == N_PARAM and (d.kids[j].s == d.kids[i].s) {
ck_err("arity", d.kids[i], `{d.s} names two parameters {d.kids[i].s}`)
return
}
j += 1
}
}
function ck_fn_body(d: Node) -> void {
mg_enter(d, 0)
let m = ck_mark()
var i = 0
while i < len(d.kids) {
if d.kids[i].kind == N_PARAM { ck_bind_param(d.kids[i]) }
if d.kids[i].kind == N_PARAM {
ck_param_twice(d, i)
ck_bind_param(d.kids[i])
}
i += 1
}
ck_ret = d.ty