  Event-driven programming is widely used for implementing user interfaces, web
applications, and non-blocking I/O. An event-driven program is organized as a
collection of event handlers whose execution is triggered by events.
Traditional static analysis techniques are unable to reason precisely about
event-driven code because they conservatively assume that event handlers may
execute in any order. This paper proposes an automatic transformation from
Interprocedural Finite Distributive Subset (IFDS) problems to Interprocedural
Distributed Environment (IDE) problems as a general solution to obtain precise
static analysis of event-driven applications; problems in both forms can be
solved by existing implementations. Our contribution is to show how to improve
analysis precision by automatically enriching the former with information about
the state of event handlers to filter out infeasible paths. We prove the
correctness of our transformation and report on experiments with a
proof-of-concept implementation for a subset of JavaScript.
