From 0e37cccd7ae2c4ad268646acfd50d2798a4786b3 Mon Sep 17 00:00:00 2001 From: SpookyDervish <78246495+SpookyDervish@users.noreply.github.com> Date: Sun, 14 Sep 2025 05:37:47 +1000 Subject: [PATCH] fixing a couple bugs --- generators/x86_64.py | 51 +++++++++++++++++++++++-------------------- out | Bin 9072 -> 496 bytes out.asm | 5 +++++ test.grnd | 6 ----- 4 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 out.asm diff --git a/generators/x86_64.py b/generators/x86_64.py index c4f3039..e4f26b6 100644 --- a/generators/x86_64.py +++ b/generators/x86_64.py @@ -189,7 +189,7 @@ class X86_64Generator(Generator): elif type(new_value) == str: # we're changing a variable to the value of a register #lines.append(f"mov QWORD [rsp + {var_pos}], {new_value}\n\t") lines.append(f"mov {var_pos}, {new_value}\n\t") - scope.table[var_name]["type"] = IntNode + #scope.table[var_name]["type"] = IntNode else: @@ -227,7 +227,8 @@ class X86_64Generator(Generator): elif type(new_value) == str: # we're changing a variable to the value of a register lines.append(f"mov QWORD [rsp + {var_pos}], {new_value}\n\t") - scope.table[var_name]["type"] = IntNode + #scope.table[var_name]["type"] = IntNode + if scope.table[var_name]["type"] != old_var_type: warning(self.code, f"Changing the type of \"{var_name}\" at runtime is considered bad practice.") @@ -697,30 +698,32 @@ class X86_64Generator(Generator): with open(self.output_path + ".asm", "w") as f: f.write("; ~~~ Auto generated by the GroundPY compiler for Linux x86_64 targets. ~~~\n\n") - f.write("section .data\n") - for name, const in self.constants.items(): - value = const["value"] - f.write(name + ": ") - value_type = type(value) - if value_type == str: - if not const["no_string"]: - value = value.replace("\"", "\", 34, \"") - value = value.replace("\r", "\", 13, \"") - value = value.replace("\n", "\", 10, \"") - value = value.replace("\a", "\", 7, \"") + if len(self.constants) > 0: + f.write("section .data\n") + for name, const in self.constants.items(): + value = const["value"] + f.write(name + ": ") + value_type = type(value) + if value_type == str: + if not const["no_string"]: + value = value.replace("\"", "\", 34, \"") + value = value.replace("\r", "\", 13, \"") + value = value.replace("\n", "\", 10, \"") + value = value.replace("\a", "\", 7, \"") - final = f'db "' + value + "\", 0" - final = final.replace(", \"\", ", ", ") - f.write(final) - else: - f.write(value) - elif value_type == float or value_type == int: - f.write(f"dq {float(value)}") - f.write("\n") + final = f'db "' + value + "\", 0" + final = final.replace(", \"\", ", ", ") + f.write(final) + else: + f.write(value) + elif value_type == float or value_type == int: + f.write(f"dq {float(value)}") + f.write("\n") - f.write("section .bss\n") - for buf, size in self.buffers.items(): - f.write(f"{buf} resb {size}\n") + if len(self.buffers) > 0: + f.write("section .bss\n") + for buf, size in self.buffers.items(): + f.write(f"{buf} resb {size}\n") f.write("section .text\n") diff --git a/out b/out index d1f28decacbc4e063d9de7376d3bc4d11d270e46..717b80d5091c08a7d2034776e3e4a94eb99ceb44 100644 GIT binary patch literal 496 zcmb<-^>JfjWMqH=CI&kOFi*e%CIqHGAn_nF4h$>|%t)fBOg11_fZ^kR1~hX(W@8iQ z#UU<&L!2Q#KB>4kzPKc@sDvRtH6^hm5lH2wFfiy9SLT)^CIRV^A_$!UWdV(%7=YZ* zgvAsGs8|J*2B`t5<$&@fpfo3t#ujQjpz@MX8b*QR0>%N-fQYtEy(9L0R{U*9{4OS^FKBP5keP^%oNUs`YybKXh(YDU8}sJKe&zjco_pF19^v zWo-M{4j_nB*j1&gPUi-KpdLlW0YS47su0z61E3V$w^dk2t-40Hc%+&=1tpz}pYm&2 z#u<=`d4oZ-F(3PmBYv+zF%*8@VJv_m4yZof7tF;s8S%RfW8$707pir}UE1<|<7`m^ t3f0kEc`{HIjRM-Q@!Hl$sz)D&a$!{5+v#GP_V2X%H(S3JXPQB>{tLCMQ}h4; diff --git a/out.asm b/out.asm new file mode 100644 index 0000000..483bcf2 --- /dev/null +++ b/out.asm @@ -0,0 +1,5 @@ +; ~~~ Auto generated by the GroundPY compiler for Linux x86_64 targets. ~~~ + +section .text +global _start +_start: diff --git a/test.grnd b/test.grnd index c961dad..e69de29 100644 --- a/test.grnd +++ b/test.grnd @@ -1,6 +0,0 @@ -@loop -stdout "/\r" -stdout "-\r" -stdout "\\r" -stdout "|\r" -jump %loop \ No newline at end of file