summaryrefslogtreecommitdiff
path: root/tnslc/compile/var.tnsl
diff options
context:
space:
mode:
authorCircleShift <kgunger12@gmail.com>2025-12-23 01:45:55 -0500
committerCircleShift <kgunger12@gmail.com>2025-12-23 01:45:55 -0500
commit562547d3c55c79f5ec92464718dab5b524c7ae83 (patch)
treec3ad9114fa3d72eba2792e0bc81b67663c611c0d /tnslc/compile/var.tnsl
parent132279939f8266e7bbd0e07f66926e36b50c35b2 (diff)
slightly better var creation (not done)
Diffstat (limited to 'tnslc/compile/var.tnsl')
-rw-r--r--tnslc/compile/var.tnsl32
1 files changed, 21 insertions, 11 deletions
diff --git a/tnslc/compile/var.tnsl b/tnslc/compile/var.tnsl
index 12d0dab..ff417c2 100644
--- a/tnslc/compile/var.tnsl
+++ b/tnslc/compile/var.tnsl
@@ -173,11 +173,15 @@ struct Var {
self.ptrc.push(~ptr)
;/
- /; is_reg_passed [bool]
- /; if (self.ptrc.count > 0)
- return true
+ /; regable [bool]
+ ~int p
+ /; loop (int i = 0; i < self.ptrc.count) [i++]
+ p = self.ptrc.get(i)
+ /; if (p` !== 0)
+ return true
+ ;/
;/
- return false
+ return _is_primitive(self._type`.name) !== 0
;/
/; actual_size [uint]
@@ -326,7 +330,7 @@ struct Var {
out.push_cstr("rel \0")
str = utils.strcpy(self.name)
;; else if (self.loc < 0)
- str = reg_string(7, 8)
+ str = reg_string(8, 8)
;; else
str = reg_string(self.loc, self.actual_size())
;/
@@ -336,12 +340,18 @@ struct Var {
/; if (self.in_mem() == true)
/; if (self.loc + 1 == 0)
- int stk = 0
- stk = stk - self.loc
- out.push_cstr(" + \0")
- str = utils.int_to_str(stk)
- out.push_cstr(str)
- _delete(str)
+ int stk = 0 - self.offset
+ /; if (stk > 0)
+ out.push_cstr(" - \0")
+ str = utils.int_to_str(stk)
+ out.push_cstr(str)
+ _delete(str)
+ ;; else if (stk < 0)
+ out.push_cstr(" + \0")
+ str = utils.int_to_str(self.offset)
+ out.push_cstr(str)
+ _delete(str)
+ ;/
;/
out.push_char(']')
;/