diff options
author | Dominik Grewe <dominikg@google.com> | 2015-01-09 20:19:12 +0300 |
---|---|---|
committer | Dominik Grewe <dominikg@google.com> | 2015-01-09 20:19:12 +0300 |
commit | 48bbfeeb65d46160370e4ee6ff2d551543eec562 (patch) | |
tree | 55a8dc50479a9f167167c8c585411ede14f0ead5 | |
parent | 2ea835522b2a57c81729bd95d4cfc4c5f63be3d9 (diff) |
Add default arguments to CInterface.
A default argument allows a user to specify one or more arguments that
are passed to each function wrapped by the interface before any other
arguments are passed. A default argument is provided by passing a
function that, given a variable name, declares and initializes the
argument.
-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 |