diff --git a/compiler/__main__.py b/compiler/__main__.py index 9c0c208..3a4814c 100644 --- a/compiler/__main__.py +++ b/compiler/__main__.py @@ -53,21 +53,15 @@ def main(): context.check() intermediate_representation = ast.intermediate_representation() + pseudo_asm = [x.codegen() for x in intermediate_representation] + for i, action in enumerate(intermediate_representation): - messages = [] - for ir_item in intermediate_representation: - ir_item.location.source = data - prefix = f"{str(ir_item.location) + ':':<30}" - source_info = ir_item.location.source_substring.splitlines(keepends=False) - messages += [f"# {prefix} {source_info.pop(0)}"] - while len(source_info) > 0: - messages += [f"# {' ' * len(prefix)} {source_info.pop(0)}"] - - messages += [f"{repr(ir_item)}\n"] - - print("\n".join(messages)) + action.location.source = data print("\n---\n", repr(context)) + + print_ir(intermediate_representation) + except CompilationError as e: e.location.source = data print(f"{e}\n{e.location.show_in_source()}", file=sys.stderr) @@ -76,6 +70,18 @@ def main(): raise e.__cause__ print(f"Caused by:\n{e.__cause__.__class__.__name__}: {e.__cause__}", file=sys.stderr) +def print_ir(intermediate_representation: list[ir.IRAction]): + messages = [] + for i, ir_item in enumerate(intermediate_representation): + prefix = f"{str(ir_item.location) + ':':<30}" + source_info = ir_item.location.source_substring.splitlines(keepends=False) + messages += [f"# {prefix} {source_info.pop(0)}"] + while len(source_info) > 0: + messages += [f"# {' ' * len(prefix)} {source_info.pop(0)}"] + + messages += [f"{repr(ir_item)}\n"] + print("\n".join(messages)) + if __name__ == "__main__": main()