diff options
author | madmaxoft <github@xoft.cz> | 2014-03-20 22:36:24 +0100 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2014-03-20 22:36:24 +0100 |
commit | 62f84d968a71ab14f6d79696fd1312a17239ba60 (patch) | |
tree | 0fcc5c7192de84edcba547f417c9b5f1bb62077e /lib/tolua++/src/bin/lua/enumerate.lua | |
parent | Plugins can set flying speed. (diff) | |
parent | Fixed enum checking functions not being called in generated code (diff) | |
download | cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.tar cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.tar.gz cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.tar.bz2 cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.tar.lz cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.tar.xz cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.tar.zst cuberite-62f84d968a71ab14f6d79696fd1312a17239ba60.zip |
Diffstat (limited to 'lib/tolua++/src/bin/lua/enumerate.lua')
-rw-r--r-- | lib/tolua++/src/bin/lua/enumerate.lua | 82 |
1 files changed, 59 insertions, 23 deletions
diff --git a/lib/tolua++/src/bin/lua/enumerate.lua b/lib/tolua++/src/bin/lua/enumerate.lua index 99fe74629..09b22a094 100644 --- a/lib/tolua++/src/bin/lua/enumerate.lua +++ b/lib/tolua++/src/bin/lua/enumerate.lua @@ -48,6 +48,25 @@ function classEnumerate:print (ident,close) print(ident.."}"..close) end +function emitenumprototype(type) + output("int tolua_is" .. string.gsub(type,"::","_") .. " (lua_State* L, int lo, int def, tolua_Error* err);") +end + +_global_output_enums = {} + +-- write support code +function classEnumerate:supcode () + if _global_output_enums[self.name] == nil then + _global_output_enums[self.name] = 1 + output("int tolua_is" .. string.gsub(self.name,"::","_") .. " (lua_State* L, int lo, int def, tolua_Error* err)") + output("{") + output("if (!tolua_isnumber(L,lo,def,err)) return 0;") + output("lua_Number val = tolua_tonumber(L,lo,def);") + output("return val >= " .. self.min .. ".0 && val <= " ..self.max .. ".0;") + output("}") + end +end + -- Internal constructor function _Enumerate (t,varname) setmetatable(t,classEnumerate) @@ -67,40 +86,57 @@ function _Enumerate (t,varname) t.access = parent.curr_member_access t.global_access = t:check_public_access() end -return t + return t end -- Constructor -- Expects a string representing the enumerate body function Enumerate (n,b,varname) b = string.gsub(b, ",[%s\n]*}", "\n}") -- eliminate last ',' - local t = split(strsub(b,2,-2),',') -- eliminate braces - local i = 1 - local e = {n=0} - while t[i] do - local tt = split(t[i],'=') -- discard initial value - e.n = e.n + 1 - e[e.n] = tt[1] - i = i+1 - end - -- set lua names - i = 1 - e.lnames = {} - local ns = getcurrnamespace() - while e[i] do - local t = split(e[i],'@') - e[i] = t[1] + local t = split(strsub(b,2,-2),',') -- eliminate braces + local i = 1 + local e = {n=0} + local value = 0 + local min = 0 + local max = 0 + while t[i] do + local tt = split(t[i],'=') -- discard initial value + e.n = e.n + 1 + e[e.n] = tt[1] + tt[2] = tonumber(tt[2]) + if tt[2] == nil then + tt[2] = value + end + value = tt[2] + 1 -- advance the selected value + if tt[2] > max then + max = tt[2] + end + if tt[2] < min then + min = tt[2] + end + i = i+1 + end + -- set lua names + i = 1 + e.lnames = {} + local ns = getcurrnamespace() + while e[i] do + local t = split(e[i],'@') + e[i] = t[1] if not t[2] then - t[2] = applyrenaming(t[1]) + t[2] = applyrenaming(t[1]) end - e.lnames[i] = t[2] or t[1] - _global_enums[ ns..e[i] ] = (ns..e[i]) - i = i+1 - end + e.lnames[i] = t[2] or t[1] + _global_enums[ ns..e[i] ] = (ns..e[i]) + i = i+1 + end e.name = n + e.min = min + e.max = max if n ~= "" then + _enums[n] = true Typedef("int "..n) end - return _Enumerate(e, varname) + return _Enumerate(e, varname) end |