An integral part of implementing functional languages is closure conversion---the
process of converting code with free variables into closed code and auxiliary data
structures. Closure conversion has been extensively studied in this context, but also
arises in languages with first-class objects. In fact, one variant of Java's inner classes
are an example of objects that need to be closure converted, and the transformation for
converting these inner classes into Java Virtual Machine classes is an example of closure
conversion.
This paper argues that a direct formulation of object closure conversion is interesting
and gives further insight into general closure conversion. It presents a formal
closure-conversion translation for a second-order object language and proves it correct.
The translation and proof generalise to other object-oriented languages, and the
paper gives some examples to support this statement. Finally, the paper discusses the well
known connection between function closures and single-method objects. This connection is
formalised by showing that an encoding of functions into objects, object closure
conversion, and various object encodings compose to give various closure-conversion
translations for functions.