diff options
| author | CircleShift <kgunger12@gmail.com> | 2025-12-24 04:09:21 -0500 |
|---|---|---|
| committer | CircleShift <kgunger12@gmail.com> | 2025-12-24 04:09:21 -0500 |
| commit | 871bec579241882e8b05eb17cf177652e4f37781 (patch) | |
| tree | e54910346875df2b7fb7d59a76d3a7d637d5eb55 /tnslc/compile/var.tnsl | |
| parent | 562547d3c55c79f5ec92464718dab5b524c7ae83 (diff) | |
strip refsorigin
Diffstat (limited to 'tnslc/compile/var.tnsl')
| -rw-r--r-- | tnslc/compile/var.tnsl | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/tnslc/compile/var.tnsl b/tnslc/compile/var.tnsl index ff417c2..cf12878 100644 --- a/tnslc/compile/var.tnsl +++ b/tnslc/compile/var.tnsl @@ -383,6 +383,21 @@ struct Var { /; _set_mem(~CompBuf buf, ~Var other) + ~uint8 to_str = self.gen_loc() + ~uint8 from_str = other`.gen_loc() + + ~uint8 str + + str = utils.int_to_str(self.actual_size()) + buf`.add_c(" mov rcx, \0") + buf`.add_c(str) + buf`.add_c("\n") + _delete(str) + + buf`.add_c(" rep movsb\0") + + _delete(to_str) + _delete(from_str) ;/ # Set this Variable to the value of other @@ -394,9 +409,48 @@ struct Var { /; set_ref(~CompBuf buf, ~Var other) ;/ + # Generate a variable which can actually be used for operations + /; strip_refs (~CompBuf buf, bool from) [Var] + Var out = self.copy() + ~int32 p = out.top_ptrc() + /; if (p == NULL) + return out + ;; else if (p` !== 0) + return out + ;/ + + ~uint8 gen = out.gen_loc() + + out.ptr_pop() + p = out.top_ptrc() + /; loop (p` == 0) + buf`.add_c(" mov rsi, \0") + buf`.add_c(gen) + buf`.add_c("\n\0") + out.loc = 5 + _delete(gen) + gen = out.gen_loc() + out.ptr_pop() + p = out.top_ptrc() + ;/ + + /; if (from == false) + buf`.add_c(" mov rdi, \0") + out.loc = 6 + ;; else + buf`.add_c(" mov rsi, \0") + out.loc = 5 + ;/ + buf`.add_c(gen) + buf`.add_c("\n\0") + _delete(gen) + + return out + ;/ + /; standard_op (~CompBuf buf, ~Var other, ~uint8 op_str) - ~uint8 from_str = other`.gen_loc() ~uint8 to_str = self.gen_loc() + ~uint8 from_str = other`.gen_loc() buf`.add_c(" \0") buf`.add_c(op_str) |