Merge branch 'master' of ssh://repo.or.cz/srv/git/lqt
[lqt.git] / generator / types.lua
blob49ad569ef51d2ae9c25bfcc7fd19716058eb308f
1 #!/usr/bin/lua
3 --[[
5 Copyright (c) 2007-2009 Mauro Iazzi
7 Permission is hereby granted, free of charge, to any person
8 obtaining a copy of this software and associated documentation
9 files (the "Software"), to deal in the Software without
10 restriction, including without limitation the rights to use,
11 copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the
13 Software is furnished to do so, subject to the following
14 conditions:
16 The above copyright notice and this permission notice shall be
17 included in all copies or substantial portions of the Software.
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
21 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 OTHER DEALINGS IN THE SOFTWARE.
28 --]]
30 local base_types = (...) or {}
32 local integer_type = {
33 get = function(j)
34 return 'lua_tointeger(L, '..tostring(j)..')', 1
35 end,
36 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
37 return 'lua_pushinteger(L, '..tostring(j)..')', 1
38 end,
39 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
40 return 'lqtL_isinteger(L, '..tostring(j)..')', 1
41 end,
43 local number_type = {
44 get = function(j)
45 return 'lua_tonumber(L, '..tostring(j)..')', 1
46 end,
47 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
48 return 'lua_pushnumber(L, '..tostring(j)..')', 1
49 end,
50 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
51 return 'lqtL_isnumber(L, '..tostring(j)..')', 1
52 end,
54 local integer_type = {
55 get = function(j)
56 return 'lua_tointeger(L, '..tostring(j)..')', 1
57 end,
58 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
59 return 'lua_pushinteger(L, '..tostring(j)..')', 1
60 end,
61 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
62 return 'lqtL_isinteger(L, '..tostring(j)..')', 1
63 end,
65 local bool_type = {
66 get = function(j)
67 return 'lua_toboolean(L, '..tostring(j)..')', 1
68 end,
69 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
70 return 'lua_pushboolean(L, '..tostring(j)..')', 1
71 end,
72 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
73 return 'lqtL_isboolean(L, '..tostring(j)..')', 1
74 end,
77 base_types['char const*'] = {
78 get = function(j)
79 return 'lua_tostring(L, '..tostring(j)..')', 1
80 end,
81 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
82 return 'lua_pushstring(L, '..tostring(j)..')', 1
83 end,
84 test = function(j)
85 return 'lqtL_isstring(L, '..tostring(j)..')', 1
86 end,
88 base_types['char'] = integer_type
89 base_types['unsigned char'] = integer_type
90 base_types['int'] = integer_type
91 base_types['unsigned'] = integer_type
92 base_types['unsigned int'] = integer_type
93 base_types['short'] = integer_type
94 base_types['short int'] = integer_type
95 base_types['unsigned short'] = integer_type
96 base_types['unsigned short int'] = integer_type
97 base_types['short unsigned int'] = integer_type
98 base_types['long'] = integer_type
99 base_types['unsigned long'] = integer_type
100 base_types['long int'] = integer_type
101 base_types['unsigned long int'] = integer_type
102 base_types['long unsigned int'] = integer_type
103 base_types['long long'] = integer_type
104 base_types['unsigned long long'] = integer_type
105 base_types['long long int'] = integer_type
106 base_types['unsigned long long int'] = integer_type
107 base_types['float'] = number_type
108 base_types['double'] = number_type
109 base_types['double const&'] = number_type
110 base_types['bool'] = bool_type
112 ---[[
113 base_types['bool*'] = {
114 get = function(j)
115 return 'lqtL_toboolref(L, '..j..')', 1
116 end,
117 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
118 return 'lua_pushboolean(L, *'..tostring(j)..')', 1
119 end,
120 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
121 return 'lqtL_isboolean(L, '..tostring(j)..')', 1
122 end,
124 base_types['int&'] = {
125 get = function(j)
126 return '*lqtL_tointref(L, '..j..')', 1
127 end,
128 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
129 return 'lua_pushinteger(L, '..tostring(j)..')', 1
130 end,
131 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
132 return 'lqtL_isinteger(L, '..tostring(j)..')', 1
133 end,
135 base_types['char**'] = {
136 get = function(j)
137 return 'lqtL_toarguments(L, '..tostring(j)..')', 1
138 end,
139 push = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
140 return 'lqtL_pusharguments(L, '..tostring(j)..')', 1
141 end,
142 test = function(j) -- must handle arguments (e.g. in virtual callbacks) and return values
143 return 'lua_istable(L, '..tostring(j)..')', 1
144 end,
146 --]]
147 base_types['std::string const&'] = {
148 get = function(i)
149 return 'std::string(lua_tostring(L, '..i..'), lua_objlen(L, '..i..'))', 1
150 end,
151 push = function(i)
152 return 'lua_pushlstring(L, '..i..'.c_str(), '..i..'.size())', 1
153 end,
154 test = function(i)
155 return 'lua_isstring(L, '..i..')', 1
156 end,
158 base_types['std::string'] = base_types['std::string const&']
161 return base_types