1 module('properties', package
.seeall
)
3 local function get_variables(class
)
5 local function traverse(c
)
6 for i
, var
in ipairs(c
) do
7 if var
.label
== "Variable" and var
.xarg
.access
== "public" then
8 table.insert(vars
, var
)
11 for b
in string.gmatch(c
.xarg
.bases
or '', '([^;]+);') do
12 local base
= fullnames
[b
]
13 if base
then traverse(base
) end
20 function fill_properties(classes
)
21 for c
in pairs(classes
) do
23 local vars
= get_variables(c
)
24 for i
, var
in ipairs(vars
) do
25 local targetType
= typesystem
[var
.xarg
.type_name
]
27 local sget
= typesystem
[c
.xarg
.fullname
..'*'].get(1)
29 ' ' .. c
.xarg
.fullname
.. '* self = ' .. sget
.. ';\n' ..
30 ' lqtL_selfcheck(L, self, "'..c
.xarg
.fullname
..'");\n' ..
31 ' ' .. targetType
.push('self->'..var
.xarg
.name
) .. ';\n' ..
35 if not var
.xarg
.type_constant
then
37 ' ' .. c
.xarg
.fullname
.. '* self = ' .. sget
.. ';\n' ..
38 ' lqtL_selfcheck(L, self, "'..c
.xarg
.fullname
..'");\n' ..
39 ' self->' .. var
.xarg
.name
.. ' = ' .. targetType
.get(3) .. ';\n' ..
43 table.insert(props
, { class
=c
.xarg
.cname
, name
= var
.xarg
.name
, type = var
.xarg
.type_name
,
44 getter
= getter
, setter
= setter
})
49 local getters
, setters
= {}, {}
50 for i
, p
in ipairs(props
) do
51 properties
= properties
.. 'static int '..p
.class
..'_get_'..p
.name
..'(lua_State *L) {\n'..p
.getter
..'}\n'
52 table.insert(getters
, p
)
54 properties
= properties
.. 'static int '..p
.class
..'_set_'..p
.name
..'(lua_State *L) {\n'..p
.setter
..'}\n'
55 table.insert(setters
, p
)
58 -- there can be less setters than getters, due to 'const'
59 for i
,g
in ipairs(getters
) do
60 getters
[i
] = ' {"'..g
.name
..'", '..g
.class
..'_get_'..g
.name
..'},'
62 for i
,s
in ipairs(setters
) do
63 setters
[i
] = ' {"'..s
.name
..'", '..s
.class
..'_set_'..s
.name
..'},'
65 c
.properties
= properties
..'\n'..
66 'static luaL_Reg lqt_getters'..c
.xarg
.id
..'[] = {\n'..table.concat(getters
, '\n')..' {NULL, NULL}\n};\n\n' ..
67 'static luaL_Reg lqt_setters'..c
.xarg
.id
..'[] = {\n'..table.concat(setters
, '\n')..' {NULL, NULL}\n};\n\n'