22 lines
844 B
Python
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") |