1. A computer implemented method for generating a typed intermediate representation of a computer program, the computer program supporting virtual inheritance and multiple inheritance, the method comprising: receiving a source code representation of the computer program in an object-oriented language, the source code representation comprising code portions related to defining one or more classes, wherein at least one of the one or more classes defined in the source code representation has a plurality of superclasses, and at least one of the plurality of superclasses is inherited at least twice; and based on the source code representation, generating, in a computer, the typed intermediate representation of the computer program, wherein the generating comprises generating an exact class representation of the at least one of the one or more classes defined in the source code representation, the exact class representation including a unique representation of the plurality of superclasses of the at least one of the one or more classes; wherein generating the exact class representation comprises generating a path from the at least one of the one or more classes to a respective superclass, the path uniquely identifying the respective superclass; wherein generating the exact class representation comprises representing the at least one of the superclasses inherited at least twice with a single path; and wherein generating the exact class representation further comprises generating a layout of the at least one of the one or more classes, wherein the layout maps to a runtime representation of an object of the at least one of the one or more classes.