aboutsummaryrefslogtreecommitdiff
path: root/metafang/cm.lua
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2025-10-15 20:31:31 +0000
committerrtk0c <[email protected]>2025-10-15 20:31:31 +0000
commit81cab430b58b75fe0a6c75722908481dd4d9d55a (patch)
tree499ba0404470de6047238eb554da6f2afa965e24 /metafang/cm.lua
parentbc8c20d1e93b5c18e8915d356e74024092a74ce8 (diff)
Move imported files into metafang/ dirHEADmaster
this metaprogramming attempt was started outside, and then imported here 5124eb80701523ac16928219e9a1031eded128ef..bc8c20d1e93b5c18e8915d356e74024092a74ce8
Diffstat (limited to 'metafang/cm.lua')
-rw-r--r--metafang/cm.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/metafang/cm.lua b/metafang/cm.lua
new file mode 100644
index 0000000..e2d11f6
--- /dev/null
+++ b/metafang/cm.lua
@@ -0,0 +1,40 @@
+-- Cm: name inspired by "C meta(language)", but it's not really a metalangauge (whatever this means) of C (or anything else)
+
+local function LateResolveType(name)
+ -- "lb" - Lazy Binding
+ return {_tag = "lb", _lb_typename = name}
+end
+
+local function TypeTagger(tag)
+ return function(props)
+ props._tag = tag
+ return props
+ end
+end
+
+local cm_env_fns = {
+ _namespace = 0, -- TODO
+ _t = LateResolveType,
+ _struct = TypeTagger("struct"),
+ _union = TypeTagger("union"),
+ _alias = TypeTagger("alias"),
+}
+local cm_env_metatable = {__index = cm_env_fns}
+
+---@param fn function
+---@return table
+function LoadCmLua(fn)
+ local env = {}
+ setmetatable(env, cm_env_metatable)
+
+ local old_fenv = getfenv(fn)
+ setfenv(fn, env)
+ pcall(fn)
+ setfenv(fn, old_fenv)
+
+ return env
+end
+
+function LoadCmDecl(src)
+ -- TODO
+end