def __call__(self, ast, env): for ppass in self.passes: ast, env = ppass(ast, env) if errors.occurred(): errors.reset() raise CompileError, ppass.__name__ return ast, env
def ddump_tc(source, verbose=False): import sys import lexer import parser import errors import pprint with errors.listen(): parse = parser.make_parser() ast = parse(source) symtab = typecheck(ast, verbose) if errors.occurred(): sys.stdout.write("Not well-typed!\n") else: print 'Locals'.center(80, '=') sys.stdout.write(pprint.pformat(symtab._locals.items()) + '\n') print 'Globals'.center(80, '=') sys.stdout.write(pprint.pformat(symtab._globals) + '\n') sys.stdout.write("Well-typed!\n")