blob: e2d11f60d549d17389403dd6f68355d9e4c25b2b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
|