diff options
author | koray kavukcuoglu <koray@kavukcuoglu.org> | 2015-01-12 20:29:54 +0300 |
---|---|---|
committer | koray kavukcuoglu <koray@kavukcuoglu.org> | 2015-01-12 20:29:54 +0300 |
commit | 6b7bb2a9f7a002e50b6d1dfc3e653ecdf4c01f4a (patch) | |
tree | 55a8dc50479a9f167167c8c585411ede14f0ead5 | |
parent | 2ea835522b2a57c81729bd95d4cfc4c5f63be3d9 (diff) | |
parent | 48bbfeeb65d46160370e4ee6ff2d551543eec562 (diff) |
Merge pull request #3 from dominikgrewe/default_arg
Add default arguments to CInterface.
-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 |