A representation of types, type-checker, and compiler are provided for
checking consistency in various forms of an intermediate language.
Type-checking a programming language in a compiler is accomplished by
taking one or more rule sets as input to a type-checker, which selects
one or more of the rule sets based upon any one, or combination of two or
more, of numerous criteria. Among them are stage of compilation, source
language, architecture, and level of typing present in the language being
type-checked. The language is then type-checked using the selected one or
more rule sets. The rule sets can include one rule set corresponding to
strong type-checking, one rule set corresponding to weak type-checking,
and one rule set corresponding to representation type-checking. In the
alternative, a compiler can be provided with a type-checker that
constructs the one or more sets of rules at runtime from a larger set of
rules based on any one, or combination of two or more, of the previously
mentioned criteria.