diff options
-rw-r--r-- | cinterface.lua | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/cinterface.lua b/cinterface.lua index d6c26bb..e8678cc 100644 --- a/cinterface.lua +++ b/cinterface.lua @@ -4,6 +4,7 @@ function CInterface.new() self = {} self.txt = {} self.registry = {} + self.defaultArguments = {} setmetatable(self, {__index=CInterface}) return self end @@ -16,6 +17,10 @@ function CInterface:print(str) table.insert(self.txt, str) end +function CInterface:registerDefaultArgument(code) + table.insert(self.defaultArguments, code) +end + function CInterface:wrap(luaname, ...) local txt = self.txt local varargs = {...} @@ -29,6 +34,10 @@ function CInterface:wrap(luaname, ...) table.insert(txt, "{") table.insert(txt, "int narg = lua_gettop(L);") + for i, defaultArgCode in ipairs(self.defaultArguments) do + table.insert(txt, defaultArgCode(string.format("default_arg%d", i))) + end + if #varargs == 2 then local cfuncname = varargs[1] local args = varargs[2] @@ -104,6 +113,7 @@ end function CInterface:clearhistory() self.txt = {} self.registry = {} + self.defaultArguments = {} end function CInterface:tostring() @@ -277,6 +287,10 @@ end function CInterface:__writecall(txt, args, cfuncname, cargs, argcreturned) local argtypes = self.argtypes + for i = 1, #self.defaultArguments do + table.insert(cargs, i, string.format('default_arg%d', i)) + end + for _,arg in ipairs(args) do tableinsertcheck(txt, arg:precall()) end |