diff options
| author | Kai Gunger <kgunger12@gmail.com> | 2025-11-30 03:52:24 -0500 |
|---|---|---|
| committer | Kai Gunger <kgunger12@gmail.com> | 2025-11-30 03:52:24 -0500 |
| commit | 46e23fa81f651961b2388c95e9569d2d39c3cffb (patch) | |
| tree | f4b8fa1704b930ce8f2397d5d5b1bfc180284642 /tnslc/compile/module.tnsl | |
| parent | 51854e5db46033712b5dbbf78d769ea500eca14f (diff) | |
Start work on backend
Diffstat (limited to 'tnslc/compile/module.tnsl')
| -rw-r--r-- | tnslc/compile/module.tnsl | 35 |
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) |