Files
GroundPY/generators/x86_64.py
2025-09-01 18:00:49 +10:00

22 lines
844 B
Python

from generators.generator import Generator
from ground_ast import *
from error import traceback
class X86_64Generator(Generator):
def init(self):
self.lines.append("global _start\n\n")
self.lines.append("_start:\n\t")
self.generate()
def generate_InstructionNode(self, node: InstructionNode):
if node.instruction == "end":
if len(node.arguments) == 0:
traceback(self.code, "TypeError", "end expects atleast 1 argument.")
elif len(node.arguments) > 1:
traceback(self.code, "TypeError", "end expects only 1 argument.")
if not isinstance(node.arguments[0], NumberNode):
traceback(self.code, "TypeError", f"end expects an integer, not {type(node.arguments[0])}")
self.lines.append("mov rax, 60\n\t")
self.lines.append("mov rdi, " + str(node.arguments[0].value) + "\n\t")
self.lines.append("syscall\n\n\t")