reconstructing types for unknown types for the intermediate program by solving at least one constraint that is collected from a portion of the intermediate program, wherein a constraint denotes a relationship between known types and unknown types; and