aboutsummaryrefslogtreecommitdiff
path: root/cm.lua
diff options
context:
space:
mode:
Diffstat (limited to 'cm.lua')
-rw-r--r--cm.lua38
1 files changed, 38 insertions, 0 deletions
diff --git a/cm.lua b/cm.lua
index e69de29..42fd532 100644
--- a/cm.lua
+++ b/cm.lua
@@ -0,0 +1,38 @@
+-- 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)
+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