fix building with SYSTEM_LUA
[lqt.git] / generator / classes.lua
blobf5d8da6d633be21e4ed3dddf051a0829fced6751
1 #!/usr/bin/lua
3 lqt = lqt or {}
4 lqt.classes = lqt.classes or {}
7 local pointer_t = function(fn)
8 local cn = string.gsub(fn, '::', '.')
9 return {
10 -- the argument is a pointer to class
11 push = function(n)
12 return 'lqtL_passudata(L, '..n..', "'..cn..'*")', 1
13 end,
14 get = function(n)
15 return 'static_cast<'..fn..'*>'
16 ..'(lqtL_toudata(L, '..n..', "'..cn..'*"))', 1
17 end,
18 test = function(n)
19 return 'lqtL_isudata(L, '..n..', "'..cn..'*")', 1
20 end,
21 onstack = cn..'*,',
23 end
24 local pointer_const_t = function(fn)
25 local cn = string.gsub(fn, '::', '.')
26 return {
27 -- the argument is a pointer to constant class instance
28 push = function(n)
29 return 'lqtL_passudata(L, '..n..', "'..cn..'*")', 1
30 end,
31 get = function(n)
32 return 'static_cast<'..fn..'*>'
33 ..'(lqtL_toudata(L, '..n..', "'..cn..'*"))', 1
34 end,
35 test = function(n)
36 return 'lqtL_isudata(L, '..n..', "'..cn..'*")', 1
37 end,
38 onstack = cn..'*,',
40 end
41 local ref_t = function(fn)
42 local cn = string.gsub(fn, '::', '.')
43 return {
44 -- the argument is a reference to class
45 push = function(n)
46 return 'lqtL_pushudata(L, &'..n..', "'..cn..'*")', 1
47 end,
48 get = function(n)
49 return '*static_cast<'..fn..'*>'
50 ..'(lqtL_toudata(L, '..n..', "'..cn..'*"))', 1
51 end,
52 test = function(n)
53 return 'lqtL_isudata(L, '..n..', "'..cn..'*")', 1
54 end,
55 onstack = cn..'*,',
57 end
58 local instance_t = function(fn)
59 local cn = string.gsub(fn, '::', '.')
60 return {
61 -- the argument is the class itself
62 push = function(n)
63 return 'lqtL_copyudata(L, &'..n..', "'..cn..'*")', 1
64 end,
65 get = function(n)
66 return '*static_cast<'..fn..'*>'
67 ..'(lqtL_toudata(L, '..n..', "'..cn..'*"))', 1
68 end,
69 test = function(n)
70 return 'lqtL_isudata(L, '..n..', "'..cn..'*")', 1
71 end,
72 onstack = cn..'*,',
74 end
75 local const_ref_t = function(fn)
76 local cn = string.gsub(fn, '::', '.')
77 return {
78 -- the argument is a pointer to class
79 push = function(n)
80 return 'lqtL_copyudata(L, &'..n..', "'..cn..'*")', 1, string.gsub(fn, ' const&$', '')
81 end,
82 get = function(n)
83 return '*static_cast<'..fn..'*>'
84 ..'(lqtL_toudata(L, '..n..', "'..cn..'*"))', 1
85 end,
86 test = function(n)
87 return 'lqtL_isudata(L, '..n..', "'..cn..'*")', 1
88 end,
89 onstack = cn..'*,',
91 end
93 lqt.classes.insert = function(cname, types) --, cancopy)
94 if types[cname]==nil then
95 types[cname..'*'] = pointer_t(cname)
96 types[cname..' const*'] = pointer_const_t(cname)
97 types[cname..'&'] = ref_t(cname)
98 --if cancopy then
99 types[cname] = instance_t(cname)
100 types[cname..' const&'] = const_ref_t(cname)
101 --end
102 return true
103 else
104 return nil