You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
cl-prolog/callgraph: generic call-graph analysis, extracted from cl-cc's prolog-tools with zero cl-cc dependency. Provides
reachability, dead-code and mutually-recursive-pair detection, FD-constraint
graph coloring, and a small textual edge notation ("main -> helper") built
on a DCG grammar. build-call-graph-from-edges takes a plain list of names
and (caller . callee) conses, so any caller can feed it without walking a
specific AST.
Nix flake: aarch64-darwin is declared again alongside x86_64-linux.
Changed
Tabling is now scoped to rulebase revisions. One table session (plus a
new prolog-succeeds-p success cache) is shared per revision instead of
rebuilt on every query, and is invalidated on the next assert/retract/
etc. retract/retractall/abolish also compact a rulebase's dead entries
once their backlog crosses a threshold and no top-level engine call is
active on the stack, bounding growth under hot retract-and-reassert
workloads. Semi-naive delta-answer evaluation was added for linear
left-recursive tabled predicates.
CHANGELOG.md has been removed from the repository; the GitHub Release
description is now the only changelog.
Removed
BREAKING:cl-prolog/callgraph:call-graph-p is no longer exported. It
was the defstruct-generated predicate for call-graph, unused anywhere in
this codebase; the struct type call-graph and its accessors
(call-graph-rulebase, call-graph-defined, call-graph-entry-points) are
unaffected. Before: (cl-prolog/callgraph:call-graph-p x). After: (typep x 'cl-prolog/callgraph:call-graph).
Fixed
First-argument predicate indexing now hashes atoms by their text (equal)
instead of by the raw interned symbol (eq), matching this project's atom
text/symbol bijection invariant. This closes the door on a clause silently
missing its index bucket if an atom's symbol identity ever diverged from
another atom sharing the same text.