[Chiara]

Program Analysis & Logic Programming


Analyzing Object-Oriented Languages


In collaboration with Fausto Spoto we have studied two static analyses for object-oriented languages. Escape analysis of object-oriented languages approximates the set of objects which do not escape from a given context. If we take a method as context, the non-escaping objects can be allocated on its activation stack; if we take a thread, Java synchronisation locks on such objects are not needed.

We have formalised a basic escape domain as an abstract interpretation of concrete states, which we then refine into a less abstract domain and, hence, leading to a more precise escape analysis. We provide optimality results for both these analyses, in the form of Galois insertions from the concrete to the abstract domains and of optimal abstract operations. The Galois insertion property is obtained by restricting the abstract domains to those elements which do not contain garbage, by using an abstract garbage collector. Our implementation of the second analyses is able to detect the stack allocatable creation points of Java (bytecode) applications.

  • In this project we are studying new static analysis for finding approximations to the path-length of variables in imperative, object-oriented programs. The path-length of a variable v is the cardinality of the longest chain of pointers that can be followed from v. As we are concerned with object-oriented programs, the objects are the main entities; so that their size and size of the data-structures contained therein, are natural and useful norms for establishing termination. Our proposed path-length analysis provides a description of the path-length of the program variables with the aim of supporting (automatic) termination inference for programs working over dynamically created data-structures (objects).