Back to Search Start Over

Purity analysis for JavaScript through abstract interpretation.

Authors :
Nicolay, Jens
Stiévenart, Quentin
De Meuter, Wolfgang
De Roover, Coen
Source :
Journal of Software: Evolution & Process. Dec2017, Vol. 29 Issue 12, pn/a-N.PAG. 34p.
Publication Year :
2017

Abstract

We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies functions as pure functions, observers, or procedures. A function is pure if none of its executions generate or depend upon externally observable side effects. A function is an observer as soon as one of its executions depends on an external side effect, but none of its executions generate observable side effects. Otherwise, the function is classified as a procedure. Function executions and associated callers are found by traversing all reachable function execution contexts on the call stack at the point where an effect occurs. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. To increase the precision of our purity analysis, we combine it with an intraprocedural analysis that determines freshness of variables and objects. We formalize the core aspects of our technique and discuss its implementation and results on common JavaScript benchmarks. Results show that our approach is capable of determining function purity in the presence of higher-order functions, dynamic property expressions, and prototypal inheritance. When compared with existing purity analyses, we find that our approach is as precise or more precise than the existing analyses. [ABSTRACT FROM AUTHOR]

Details

Language :
English
ISSN :
20477473
Volume :
29
Issue :
12
Database :
Academic Search Index
Journal :
Journal of Software: Evolution & Process
Publication Type :
Academic Journal
Accession number :
126766595
Full Text :
https://doi.org/10.1002/smr.1889