summaryrefslogtreecommitdiff
path: root/tnslc/compile/function.tnsl
diff options
context:
space:
mode:
authorKai Gunger <kgunger12@gmail.com>2026-06-14 03:24:29 -0400
committerKai Gunger <kgunger12@gmail.com>2026-06-14 03:24:29 -0400
commita79a6d8f9be059b2bf2c1fc6548592546322f53d (patch)
treedb99ee1b932c2e668929c02098fd5c78e0ee6cb6 /tnslc/compile/function.tnsl
parent20b9f5a8418670665ff5c5d3f5de538d35ec161b (diff)
[tnslc] string literal gen in func scopedevel
Diffstat (limited to 'tnslc/compile/function.tnsl')
-rw-r--r--tnslc/compile/function.tnsl57
1 files changed, 31 insertions, 26 deletions
diff --git a/tnslc/compile/function.tnsl b/tnslc/compile/function.tnsl
index 4947d75..29ec748 100644
--- a/tnslc/compile/function.tnsl
+++ b/tnslc/compile/function.tnsl
@@ -239,7 +239,7 @@ struct Function {
set = set - 1
ptc` = set
;/
- out.mk_set_var(in)
+ out.mk_set_var(in, in)
;/
return out
@@ -844,11 +844,7 @@ struct Function {
/; if (sub`.sub.count > 0)
sub = sub`.sub.get(0)
Var val = self._compile_value(s, sub)
- # Need var name correct
- _delete(val.name)
- ~uint8 name = utils.strcpy(v`.name)
- val.name = name
- s`.mk_set_var(~val)
+ s`.mk_set_var(v, ~val)
val.end()
;; else
s`.mk_var(v)
@@ -1664,6 +1660,7 @@ struct Function {
# If we are setting
/; if (utils.strcmp(n`.data, "=\0") == true)
Var lhs = self._compile_value(s, lhn)
+ lhs._print(0)
/; if (s`.is_tmp(~lhs) == true)
s`.free_after(~lhs, true)
@@ -1828,19 +1825,22 @@ struct Function {
uint8 val = utils.unquote_cha(dat)
out.offset = val
;; else if (n`.data{0} == '\"')
- ~Struct t = self._find_literal_type(s, "uint8\0")
~uint8 dlab = s`.gen_const_name()
- out._init(t)
- _delete(out.name)
- out.name = dlab
- out.ptr_push(1)
+ utils.Vector vout = utils.unquote_str(n`.data)
+
+ # Data label (array)
~CompBuf buf = s`.cb
buf`.add_d(dlab)
- buf`.add_d(":\n db \0")
+ buf`.add_d(":\n dq \0")
- utils.Vector vout = utils.unquote_str(n`.data)
+ # Initial data gen (size)
+ ~uint8 tmp = utils.int_to_str(vout.count)
+ buf`.add_d(tmp)
+ buf`.add_d("\n db \0")
+ _delete(tmp)
+ # Initial data gen (string)
/; loop (int i = 1; i < vout.count) [i++]
~uint8 uptr = vout.get(i - 1)
uint8 utmp = uptr`
@@ -1850,6 +1850,7 @@ struct Function {
_delete(tmp)
;/
+ # Finish data gen (string)
/; if (vout.count > 0)
int i = vout.count
~uint8 uptr = vout.get(i - 1)
@@ -1862,21 +1863,25 @@ struct Function {
;/
buf`.add_d("\n\0")
-
- # Generate response text
vout.end()
- tmp = self._global_ptr()
- vout.from_cstr(" dq \0")
- vout.push_cstr(tmp)
- _delete(tmp)
- int idx = self.ptrc.count - 1
- idx = idx - depth
- ~int32 pc = self.ptrc.get(idx)
- /; if (pc` < 1)
- vout.push_cstr(" + 8\0")
- ;/
- vout.push_cstr("\n\0")
+ # Generate ptr to data
+ vout.from_cstr(dlab)
+ vout.push_cstr("#ptr\0")
+ tmp = vout.as_cstr()
+ buf`.add_d(tmp)
+ buf`.add_d(":\n dq \0")
+ buf`.add_d(dlab)
+ buf`.add_d(" + 8\n\0")
+
+ ~Struct t = self._find_literal_type(s, "uint8\0")
+ out._init(t)
+ _delete(out.name)
+ out.name = vout.as_cstr()
+ out.ptr_push(1)
+ out.loc = out.loc - 2
+
+ _delete(dlab)
;; else
~Struct t = self._find_literal_type(s, "int\0")