From a79a6d8f9be059b2bf2c1fc6548592546322f53d Mon Sep 17 00:00:00 2001 From: Kai Gunger Date: Sun, 14 Jun 2026 03:24:29 -0400 Subject: [tnslc] string literal gen in func scope --- tnslc/compile/function.tnsl | 57 ++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 26 deletions(-) (limited to 'tnslc/compile/function.tnsl') 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") -- cgit v1.2.3