krka/kahlua2 — Issue #9: Incorrect passing of unassigned arguments
Author: haesemaths
Created: 2012-01-17 01:07:41+00:00
State: open

In certain situations instead of passing a nil value to an unassigned argument, Kahlua may pass a different value.

The simplest case I can produce is

````lua
function f(a,b,c,d)
print(a,b,c,d)
end

f({setmetatable({},{})},0,1)
-- Prints result "table ..., 0, 1, 1" instead of "table ..., 0, 1, nil"
````

Whether this error occurs depends on the number of arguments passed to and the position of a setmetatable within another table. Some examples

````lua
function g(a,b,c,d,e,f)
print(a,b,c,d,e,f)
end

g({setmetatable({},{})},0,'x')
-- Correct: "table, 0, 'x', nil, nil, nil "
g({setmetatable({},{})},0,0,'x')
-- Incorrect: "table, 0, 0, 'x', 'x', nil"
g({setmetatable({},{})},0,0,0,'x')
-- Incorrect: "table, 0, 0, 0, 'x', 'x' "
g({0, setmetatable({},{})},0,'x')
-- Correct: "table, 0, 'x', nil, nil, nil "
g({0, setmetatable({},{})},0,0,'x')
-- Correct: "table, 0, 0, 'x', nil, nil"
g({0, setmetatable({},{})},0,0,0,'x')
-- Incorrect: "table, 0, 0, 0, 'x', 'x' "
g({setmetatable({},{}),0},0,0,0,'x')
-- Correct: "table, 0, 0, 0, 'x', 'nil' "

g({setmetatable({},{})},0,0,'x',nil)
-- Correct: "table, 0, 0, 'x', nil, nil"
````