mirror of
https://github.com/lua/lua
synced 2024-11-28 15:43:08 +03:00
A return can have at most 254 values
This commit is contained in:
parent
8b752ddf14
commit
3e88b72b8e
2
lcode.c
2
lcode.c
@ -208,6 +208,8 @@ void luaK_ret (FuncState *fs, int first, int nret) {
|
|||||||
case 1: op = OP_RETURN1; break;
|
case 1: op = OP_RETURN1; break;
|
||||||
default: op = OP_RETURN; break;
|
default: op = OP_RETURN; break;
|
||||||
}
|
}
|
||||||
|
if (nret + 1 > MAXARG_B)
|
||||||
|
luaX_syntaxerror(fs->ls, "too many returns");
|
||||||
luaK_codeABC(fs, op, first, nret + 1, 0);
|
luaK_codeABC(fs, op, first, nret + 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,5 +518,16 @@ do -- check reuse of strings in dumps
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
do -- test limit of multiple returns (254 values)
|
||||||
|
local code = "return 10" .. string.rep(",10", 253)
|
||||||
|
local res = {assert(load(code))()}
|
||||||
|
assert(#res == 254 and res[254] == 10)
|
||||||
|
|
||||||
|
code = code .. ",10"
|
||||||
|
local status, msg = load(code)
|
||||||
|
assert(not status and string.find(msg, "too many returns"))
|
||||||
|
end
|
||||||
|
|
||||||
print('OK')
|
print('OK')
|
||||||
return deep
|
return deep
|
||||||
|
Loading…
Reference in New Issue
Block a user