-- 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