Menu

#38 Vararg expression (...) inconsistent behaviour

v3.0-beta1
closed-fixed
nobody
None
5
2015-04-30
2014-10-07
Vlad Fedin
No

Got some weird behaviour of multiple variable assignment using identity function:

local I = function(...) return ... end

So

local v1, v2, v3 = I(val1, val2, val3)

become

v1 == val3
v2 == val3
v3 == val3

instead of

v1 == val1
v2 == val2
v3 == val3

In plain 5.2 lua:

> lua
Lua 5.2.2  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> local i = function(...) return ... end print(i(1, 2, 3)) local v1, v2, v3 = i(1, 2, 3) print(v1, v2, v3)
1       2       3
1       2       3

In luaj:

> java -cp lib/luaj-jse-3.0.jar lua -v
Luaj-jse 3.0 Copyright (c) 2012 Luaj.org.org
> java -cp lib/luaj-jse-3.0.jar lua
> local i = function(...) return ... end print(i(1, 2, 3)) local v1, v2, v3 = i(1, 2, 3) print(v1, v2, v3)      
1       2       3
3       3       3

But it unexpectedly works as intended with 2 variables

java -cp lib/luaj-jse-3.0.jar lua -v
Luaj-jse 3.0 Copyright (c) 2012 Luaj.org.org
> java -cp lib/luaj-jse-3.0.jar lua
> local i = function(...) return ... end print(i(1, 2)) local v1, v2 = i(1, 2) print(v1, v2)
1       2
1       2

Discussion

  • James Roseborough

    This was happening for some but not all cases of varargs return values being assigned using a multiple assignment statement.

    A unit test has been added to reproduce this and a fix has been applied for v 3.0.1

     
  • James Roseborough

    • status: open --> pending-fixed
     
  • James Roseborough

    Is fixed in version 3.0.1.

     
  • James Roseborough

    • status: pending-fixed --> closed-fixed
     

Log in to post a comment.