Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 25s
The renamer for anonymous `_` variables started at counter 0 and
produced `_anon1, _anon2, ...` unconditionally. A user writing the
same naming convention would see their variables shadowed:
(dl-eval "p(a, b). p(c, d). q(_anon1) :- p(_anon1, _)."
"?- q(X).")
=> () ; should be ({:X a} {:X c})
The `_` got renamed to `_anon1` too, collapsing the two positions
of `p` to a single var (forcing args to be equal — which neither
tuple satisfies).
Fix: scan each rule (and query goal) for the highest `_anon<N>`
already present and start the renamer past it. New helpers
`dl-max-anon-num` / `dl-max-anon-num-list` / `dl-try-parse-int`
walk the rule tree; `dl-make-anon-renamer` now takes a `start`
argument; `dl-rename-anon-rule` and the query-time renamer in
`dl-query` both compute the start from the input.
1 regression test; conformance 275/275.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21 lines
775 B
JSON
21 lines
775 B
JSON
{
|
|
"lang": "datalog",
|
|
"total_passed": 275,
|
|
"total_failed": 0,
|
|
"total": 275,
|
|
"suites": [
|
|
{"name":"tokenize","passed":31,"failed":0,"total":31},
|
|
{"name":"parse","passed":23,"failed":0,"total":23},
|
|
{"name":"unify","passed":29,"failed":0,"total":29},
|
|
{"name":"eval","passed":43,"failed":0,"total":43},
|
|
{"name":"builtins","passed":26,"failed":0,"total":26},
|
|
{"name":"semi_naive","passed":8,"failed":0,"total":8},
|
|
{"name":"negation","passed":12,"failed":0,"total":12},
|
|
{"name":"aggregates","passed":23,"failed":0,"total":23},
|
|
{"name":"api","passed":22,"failed":0,"total":22},
|
|
{"name":"magic","passed":37,"failed":0,"total":37},
|
|
{"name":"demo","passed":21,"failed":0,"total":21}
|
|
],
|
|
"generated": "2026-05-11T09:34:17+00:00"
|
|
}
|