aboutsummaryrefslogtreecommitdiff
path: root/cm.lua
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2025-09-24 23:48:16 +0000
committerrtk0c <[email protected]>2025-10-15 20:28:15 +0000
commitab49edbb106c25b980bac0227a3db55b74378784 (patch)
tree9c692af3a095be9374fc9775c35d47ff5acc04e1 /cm.lua
parentc4564f9f5c28abe8913c569374a7d778a6473210 (diff)
lua literals loading draft, and contemplations on the bigger picture Cm language
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