mirror of
https://github.com/github/codeql.git
synced 2026-04-28 18:25:24 +02:00
Initial commit of Python queries and QL libraries.
This commit is contained in:
committed by
Mark Shannon
parent
90c75cd362
commit
5f58824d1b
29
python/ql/src/analysis/CallGraphMarginalEfficiency.ql
Normal file
29
python/ql/src/analysis/CallGraphMarginalEfficiency.ql
Normal file
@@ -0,0 +1,29 @@
|
||||
/** Compute the marginal increase call-graph facts, the total size of the call-graph relation and
|
||||
* the ratio of the two in relation to the depth of context.
|
||||
*/
|
||||
|
||||
import python
|
||||
import semmle.python.pointsto.PointsTo
|
||||
import semmle.python.pointsto.PointsToContext
|
||||
|
||||
from int total_facts, int total_size, int depth, float efficiency
|
||||
where
|
||||
total_facts = strictcount(ControlFlowNode call, FunctionObject func |
|
||||
exists(PointsToContext ctx |
|
||||
call = PointsTo::get_a_call(func, ctx) and
|
||||
depth = ctx.getDepth()
|
||||
and not
|
||||
exists(PointsToContext shallower |
|
||||
call = PointsTo::get_a_call(func, shallower) and
|
||||
shallower.getDepth() < depth
|
||||
)
|
||||
)
|
||||
)
|
||||
and
|
||||
total_size = strictcount(ControlFlowNode call, FunctionObject func, PointsToContext ctx |
|
||||
call = PointsTo::get_a_call(func, ctx) and
|
||||
depth = ctx.getDepth()
|
||||
)
|
||||
and
|
||||
efficiency = 100.0 * total_facts / total_size
|
||||
select depth, total_facts, total_size, efficiency
|
||||
Reference in New Issue
Block a user