Introspective pushdown analysis is a technique for analyzing higher-order and object-oriented programs.
The pushdown abstraction makes it possible to precisely match calls with returns, thereby improving upon previous
approaches based on finite state machines that have difficulties with analyzing recursive behavior properly.
By making the pushdown abstraction introspective, abstract garbage collection can be applied to improve
the precision even more.
JIPDA is able to analyze higher-order functions and objects with prototype-based inheritance.
It outputs a Dyck state graph that can be used as the foundation for implementing many different analyses.
Some of its key features:
Some of the analyses that have been (or are being) implemented on top of JIPDA:
- abstract garbage collection
- abstract counting
- pluggable lattice (finite-height only at the moment, join used as widening operator)
- pluggable address generator to determine polyvariance (0CFA, 1CFA, ...)
- interprocedural dependence analysis (for e.g. automatic parallelization)
- function purity analysis (for e.g. common subexpression elimination)
- escape analysis (for stack-allocating objects as a compiler optimization)
DSG Web Interface
The intent of this page is to have a visualization of the DSG for developers of JIPDA and the static analyses based on the graph,
and the interface is very rudimentary (as in non-existent).
Almost no global objects/methods/functions are implemented,
so your best bet is to try small programs with self-defined functions and objects only.