Errors: - Not supported - Only * is supported - Expected * in *, but got * - Divergent type in (construct), (location 1), (location 2) - Unknown field - Unbounded variable - Different variable - Different domain - * is not subclass of * - Type not equal - Incorrect number of parameters GlobalContext: - Separate from typedefs - Interact with python intepreter to get data - Primitive Type Instance List - Symbol Table (readable, ever defined) - TypeVar definition stack - Provide subst, inv_subst, blablabla - Cache type var method lookup (dropped when related assumptions are changed) - Responsible for printing the error (lookup module/type info, handle line number offset) Name Resolution: - Get class/methods, track module via `inspect.getmodule` - GlobalContext store function/class - module association, perform name resolution in the module when identifier is unbounded, and check its type