Example #1
0
    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
Example #2
0
    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
Example #3
0
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")