summaryrefslogtreecommitdiff
path: root/tnslc/compile/module.tnsl
diff options
context:
space:
mode:
Diffstat (limited to 'tnslc/compile/module.tnsl')
-rw-r--r--tnslc/compile/module.tnsl58
1 files changed, 55 insertions, 3 deletions
diff --git a/tnslc/compile/module.tnsl b/tnslc/compile/module.tnsl
index b33ae58..41890b3 100644
--- a/tnslc/compile/module.tnsl
+++ b/tnslc/compile/module.tnsl
@@ -1,11 +1,63 @@
struct Module {
+ ~uint8 name,
~Module parent,
- utils.Vector vars
+ utils.Vector vars, funcs, submods,
+ bool exported
}
/; method Module
- /; init (~Module parent)
+ /; init (~uint8 name, ~Module parent, bool exported)
self.parent = parent
- self.vars.init(1)
+ self.exported = exported
+ self.name = utils.strclone(name)
+
+ Variable v
+ self.vars.init(len v)
+ Function f
+ self.funcs.init(len f)
+ Module m
+ self.submods.init(len m)
+ ;/
+
+ # Assumes that variable will be freed by this module
+ /; add_var (~Variable v)
+ self.vars.push(v)
+ ;/
+
+ # Assumes that function will be freed by this module
+ /; add_func (~Function f)
+ self.funcs.push(f)
+ ;/
+
+ # Assumes that submod will be freed by this module
+ /; add_sub (~Module s)
+ self.submods.push(s)
+ ;/
+
+ # Free all contained substructures
+ /; end
+ _delete(self.name)
+
+ ~Variable v
+ /; loop (int i = 0; i < self.vars.count) [i++]
+ v = self.vars.get(i)
+ v`.end()
+ ;/
+
+ ~Function f
+ /; loop (int i = 0; i < self.funcs.count) [i++]
+ f = self.funcs.get(i)
+ f`.end()
+ ;/
+
+ ~Module s
+ /; loop (int i = 0; i < self.submods.count) [i++]
+ s = self.submods.get(i)
+ s`.end()
+ ;/
+
+ self.vars.end()
+ self.funcs.end()
+ self.submods.end()
;/
;/