QL4QL: Discard predicates are always alive

This commit is contained in:
Kasper Svendsen
2025-07-10 11:01:37 +02:00
parent 9de3617032
commit 9f260cf72f

View File

@@ -39,6 +39,10 @@ private AstNode queryPredicate() {
result = queryPredicate().getAChild()
}
private AstNode discardPredicate() {
result.(Predicate).getAnAnnotation() instanceof OverlayDiscardEntity
}
AstNode hackyShouldBeTreatedAsAlive() {
// Stages from the shared DataFlow impl are copy-pasted, so predicates that are dead in one stage are not dead in another.
result = any(Module mod | mod.getName().matches("Stage%")).getAMember().(ClasslessPredicate) and
@@ -58,7 +62,7 @@ AstNode hackyShouldBeTreatedAsAlive() {
*/
private AstNode alive() {
//
// The 4 base cases.
// The 5 base cases.
//
// 1) everything that can be imported.
result = publicApi()
@@ -73,6 +77,9 @@ private AstNode alive() {
// 4) Things that aren't really alive, but that this query treats as live.
result = hackyShouldBeTreatedAsAlive()
or
// 5) discard predicates
result = discardPredicate()
or
result instanceof TopLevel // toplevel is always alive.
or
// recursive cases