1. A computer implemented method comprising: receiving source code in an object-oriented language, wherein the source code defines a class hierarchy having an inner object defined in the class hierarchy as inherited, directly or indirectly, by an outermost object of the class hierarchy, and wherein the outermost object implements multiple inheritance; determining, in a computer, a complete class inheritance path from the outermost object to a runtime type of the inner object; and during type checking, in an intermediate representation of the source code, using a path type to represent a type of the inner object within the outermost object, wherein the path type comprises the complete class inheritance path from the outermost object to the runtime type the inner object; wherein the path type comprises an existential type if the runtime type of the inner object is not known; and wherein the existential type comprises a complete class inheritance path from the outermost object to each possible inner object.