kahlua2 icon indicating copy to clipboard operation
kahlua2 copied to clipboard

Incorrect passing of unassigned arguments

Open haesemaths opened this issue 13 years ago • 3 comments

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

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

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"

haesemaths avatar Jan 17 '12 01:01 haesemaths

I tried the sample code, but I could not reproduce the errors.

krka avatar Jan 17 '12 07:01 krka

Sorry, when I was testing them I was internally using a return statement I forgot to include in the code.

Try:

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

return f({setmetatable({},{})},0,1)

haesemaths avatar Jan 19 '12 00:01 haesemaths

Thanks, that reproduces it. I'll see if I can get to the bottom of it.

krka avatar Jan 19 '12 14:01 krka