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; and based on the source code representation, generating the typed intermediate representation of the computer program by generating an exact class representation of at least one of the one or more classes defined in the source code, the exact class representation including a unique representation of all superclasses of the class.