JavaScript Introspective Pushdown Analysis

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 an implementation of an introspective pushdown analysis for a JavaScript-like language. 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:

DSG Web Interface

A simple webinterface is available to visualize the Dyck state graph (DSG) for a given JavaScript program as computed by JIPDA. 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). The JavaScript features it supports are limited, but already form an interesting subset of the language. Almost no global objects/methods/functions are implemented, so your best bet is to try small programs with self-defined functions and objects only.

Try it!