Dynamic Determinacy Analysis Max Schäfer ∗ Manu Sridharan Julian Dolby Frank Tip Nanyang Technological University IBM T.J. Watson Research Center University of Waterloo
[email protected] {msridhar, dolby}@us.ibm.com
[email protected] Abstract attempts to obtain useful analysis results. In practice, however, pro- We present an analysis for identifying determinate variables and grammers tend to use reflective features in a more disciplined fash- expressions that always have the same value at a given program ion. For instance, Bodden et al. [5] found that Java programs using point. This information can be exploited by client analyses and reflective class loading tend to always load the same classes, so by tools to, e.g., identify dead code or specialize uses of dynamic observing the classes loaded on some test runs, an analysis can gain language constructs such as eval, replacing them with equiva- a fairly complete picture of the program’s reflective behavior. Simi- lent static constructs. Our analysis is completely dynamic and only larly, Furr et al. [13] report that while dynamic features in Ruby are needs to observe a single execution of the program, yet the deter- used pervasively, most uses are “highly constrained” and can be re- minacy facts it infers hold for any execution. We present a formal placed with static alternatives, and Jensen et al. [17] show similar soundness proof of the analysis for a simple imperative language, results for uses of eval in JavaScript. and a prototype implementation that handles full JavaScript. Fi- This paper proposes a general approach for soundly identifying such constrained uses of dynamic language features.