resolve calls to all instantiations of a signature predicate

This commit is contained in:
Erik Krogh Kristensen
2022-06-16 22:14:42 +02:00
parent 2a7a0f398a
commit dce817ec4b
2 changed files with 11 additions and 4 deletions

View File

@@ -70,10 +70,16 @@ private module Cached {
definesPredicate(m, pc.getPredicateName(), pc.getNumberOfArguments(), p, public)
)
or
exists(Module mod, PredicateExpr sig |
mod.hasParameter(_, pc.getPredicateName(), sig) and
p = sig.getResolvedPredicate() and // <- this is a `signature predicate`, but that's fine.
sig.getArity() = pc.getNumberOfArguments() // TODO: resolve all instantiations?
exists(Module mod, PredicateExpr sig, int i |
mod.hasParameter(i, pc.getPredicateName(), sig) and
sig.getArity() = pc.getNumberOfArguments()
|
p = sig.getResolvedPredicate() // <- this is a `signature predicate`, but that's fine.
or
exists(ModuleExpr inst, SignatureExpr arg | inst.getResolvedModule().asModule() = mod |
arg = inst.getArgument(i) and
p = arg.asPredicate().getResolvedPredicate()
)
)
}

View File

@@ -22,6 +22,7 @@ getTarget
| Overrides.qll:28:3:28:9 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
| Overrides.qll:29:3:29:10 | MemberCall | Overrides.qll:8:3:8:41 | ClassPredicate baz |
| ParamModules.qll:5:28:5:41 | PredicateCall | ParamModules.qll:2:13:2:36 | ClasslessPredicate fooSig |
| ParamModules.qll:5:28:5:41 | PredicateCall | ParamModules.qll:8:3:8:35 | ClasslessPredicate myFoo |
| ParamModules.qll:10:26:10:49 | PredicateCall | ParamModules.qll:5:5:5:43 | ClasslessPredicate bar |
| ParamModules.qll:26:27:26:53 | PredicateCall | ParamModules.qll:17:5:17:42 | ClasslessPredicate getAnEven |
| ParamModules.qll:26:27:26:61 | MemberCall | ParamModules.qll:23:5:23:39 | ClassPredicate myFoo |