diff --git a/lang/compile.py b/lang/compile.py index 4a47639..04addc2 100755 --- a/lang/compile.py +++ b/lang/compile.py @@ -180,39 +180,39 @@ self.number = number def __repr__(self): - return '\n\tIRNumber(number=%i)' % (self.number) + return 'IRNumber(number=%i)' % (self.number) class IRAllocate(): def __init__(self, size): self.size = size def __repr__(self): - return '\n\tIRAllocate(size=%i)' % (self.size) + return 'IRAllocate(size=%i)' % (self.size) class IRDrop(): def __init__(self, size): self.size = size def __repr__(self): - return '\n\tIRDrop(number=%i)' % (self.size) + return 'IRDrop(number=%i)' % (self.size) class IRSelf(): def __repr__(self): - return '\n\tIRSelf' + return 'IRSelf' class IRLoad(): def __init__(self, variable): self.variable = variable def __repr__(self): - return '\n\tIRLoad(variable=%s)' % (self.variable) + return 'IRLoad(variable=%s)' % (self.variable) class IRStore(): def __init__(self, variable): self.variable = variable def __repr__(self): - return '\n\tIRStore(variable=%s)' % (self.variable) + return 'IRStore(variable=%s)' % (self.variable) class IRCall(): def __init__(self, name, args): @@ -220,11 +220,11 @@ self.args = args def __repr__(self): - return '\n\tIRCall(name="%s", args=%i)' % (self.name, self.args) + return 'IRCall(name="%s", args=%i)' % (self.name, self.args) class IRReturn(): def __repr__(self): - return '\n\tIRReturn()' + return 'IRReturn()' class IRFunction(): def __init__(self, name, statements): @@ -239,7 +239,7 @@ self.depth = depth def __repr__(self): - return '\n\tIRDepthCheck(depth=%i)' % (self.depth) + return 'IRDepthCheck(depth=%i)' % (self.depth) ## IR Generator @@ -395,7 +395,9 @@ def generate_bytecode_function(ir): bytes = b"" + output = "" for node in ir.statements: + output += "\t// " + str(node) + "\n\t" if isinstance(node, IRNumber): bytes += b"\x01" # OP_NUM bytes += node.number.to_bytes(4, 'little') @@ -429,16 +431,18 @@ else: print("Unknown bytecode node: %s" % (node)) return None - bytes += b"\x00" # OP_END - return bytes + for b in bytes: + output += "0x%02x, " % (b) + bytes = b"" + output += "\n" + #bytes += b"\x00" # OP_END + return output ## C file output def generate_header(ir, source): header = "/* Autogenerated by compile.py.\n\n" header += source - for i in ir: - header += "\n" + str(i) + "\n" header += "*/\n\n" includes = [ '"bytecode.h"', @@ -483,16 +487,8 @@ print("Unknown bytecode node: %s" % (node)) return None output = "static const unsigned char " - output += "bytecode_%s [] = {\n\t" % (node.name) - col = 0 - for b in bytes: - output += "0x%02x, " % (b) - col += 1 - if col == 10: - output += "\n\t" - col = 0 - if col != 0: - output += "\n" + output += "bytecode_%s [] = {\n" % (node.name) + output += bytes output += "};\n\n" return output