summaryrefslogtreecommitdiff
path: root/tnslc/compile/function.tnsl
diff options
context:
space:
mode:
Diffstat (limited to 'tnslc/compile/function.tnsl')
-rw-r--r--tnslc/compile/function.tnsl15
1 files changed, 15 insertions, 0 deletions
diff --git a/tnslc/compile/function.tnsl b/tnslc/compile/function.tnsl
index bf06f80..f0aac81 100644
--- a/tnslc/compile/function.tnsl
+++ b/tnslc/compile/function.tnsl
@@ -19,6 +19,8 @@ struct Function {
/; _resolve_dlist (~Module parent, ~parse.Node dl)
~parse.Node tn = NULL
~parse.Node n
+ int reg = 1
+ int stack_down = 0
/; loop (int i = 0; i < dl`.sub.count) [i++]
n = dl`.sub.get(i)
/; if (n`._type == parse.NTYPE_TYPE)
@@ -31,6 +33,14 @@ struct Function {
Var p
p.init(tn, n)
p._resolve_type(parent)
+ /; if (p.is_reg_passed() == true && reg < 7)
+ p.loc = reg
+ reg++
+ ;; else
+ p.loc = 0
+ p.loc = p.loc - stack_down
+ stack_down = stack_down - p.actual_size()
+ ;/
self.inputs.push(~p)
;/
;/
@@ -96,6 +106,11 @@ struct Function {
cb`.add_c(" push r15 ; scope init\n\n\0")
# TODO: Add all params to the scope
+ ~Var in
+ /; loop (int i = 0; i < self.inputs.count) [i++]
+ in = self.inputs.get(i)
+ out.mk_set_var(in)
+ ;/
return out
;/