summaryrefslogtreecommitdiff
path: root/tnslc/compile/module.tnsl
diff options
context:
space:
mode:
authorKai Gunger <kgunger12@gmail.com>2025-11-30 03:52:24 -0500
committerKai Gunger <kgunger12@gmail.com>2025-11-30 03:52:24 -0500
commit46e23fa81f651961b2388c95e9569d2d39c3cffb (patch)
treef4b8fa1704b930ce8f2397d5d5b1bfc180284642 /tnslc/compile/module.tnsl
parent51854e5db46033712b5dbbf78d769ea500eca14f (diff)
Start work on backend
Diffstat (limited to 'tnslc/compile/module.tnsl')
-rw-r--r--tnslc/compile/module.tnsl35
1 files changed, 30 insertions, 5 deletions
diff --git a/tnslc/compile/module.tnsl b/tnslc/compile/module.tnsl
index fd44b07..6aa6149 100644
--- a/tnslc/compile/module.tnsl
+++ b/tnslc/compile/module.tnsl
@@ -24,7 +24,7 @@ struct Module {
/; method Module
- /; init (~parse.Node mod)
+ /; init (~parse.Node mod, ~CompBuf buf)
Var v
Struct s
Function f
@@ -38,7 +38,7 @@ struct Module {
self.name = utils.strcpy(mod`.data)
self.e = mod`._type == parse.NTYPE_EXPORT
- self._from_tree(mod)
+ self._from_tree(mod, buf)
~Module sub
/; loop (int i = 0; i < self.subs.count) [i++]
@@ -55,16 +55,20 @@ struct Module {
;/
;/
- /; _from_tree (~parse.Node mod)
+ /; _from_tree (~parse.Node mod, ~CompBuf buf)
~parse.Node sub
/; loop (int i = 0; i < mod`.sub.count) [i++]
sub = mod`.sub.get(i)
# TODO: Vars, Enums, Method blocks
- /; if (sub`._type == parse.NTYPE_MOD || sub`._type == parse.NTYPE_EXPORT)
+ /; if (sub`._type == parse.NTYPE_MODULE)
Module m
- m.init(sub)
+ m.init(sub, buf)
+ self.subs.push(~m)
+ ;; else if (sub`._type == parse.NTYPE_EXPORT)
+ Module m
+ m.init(sub, buf)
self.subs.push(~m)
;; else if (sub`._type == parse.NTYPE_STRUCT)
Struct s
@@ -74,6 +78,9 @@ struct Module {
Function f
f.init(sub)
self.funcs.push(~f)
+ ;; else if (sub`._type == parse.NTYPE_ASM)
+ buf`.add_h(sub`.data)
+ buf`.add_h("\n\0")
;/
;/
;/
@@ -95,6 +102,18 @@ struct Module {
;/
;/
+ ~Var v
+ /; loop (int i = 0; i < self.vars.count) [i++]
+ v = self.vars.get(i)
+ v`._resolve_type(~self)
+ ;/
+
+ ~Function f
+ /; loop (int i = 0; i < self.funcs.count) [i++]
+ f = self.funcs.get(i)
+ f`._resolve_type(~self)
+ ;/
+
~Module m
/; loop (int i = 0; i < self.subs.count) [i++]
m = self.subs.get(i)
@@ -103,6 +122,12 @@ struct Module {
;/
/; _compile (~CompBuf cb)
+ ~Var v
+ /; loop (int i = 0; i < self.vars.count) [i++]
+ v = self.vars.get(i)
+ v`._static_compile(~self, cb)
+ ;/
+
~Function f
/; loop (int i = 0; i < self.funcs.count) [i++]
f = self.funcs.get(i)