From 81cab430b58b75fe0a6c75722908481dd4d9d55a Mon Sep 17 00:00:00 2001 From: rtk0c Date: Wed, 15 Oct 2025 20:31:31 +0000 Subject: Move imported files into metafang/ dir this metaprogramming attempt was started outside, and then imported here 5124eb80701523ac16928219e9a1031eded128ef..bc8c20d1e93b5c18e8915d356e74024092a74ce8 --- metafang/cm.lua | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 metafang/cm.lua (limited to 'metafang/cm.lua') 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 -- cgit v1.3.1