返回

“function or expression needs too many registers” 阻碍了把数据序列化成代码,怎样绕过比较好?

return {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}}}}}}

error:function or expression needs too many registers near '1'

官方bug列表有个类似的例子:
http://lua-users.org/lists/lua-l/2015-04/msg00376.html
但是这个错误根本不需要local也会触发, 两个{{之间的变量:如{1,2,3,{}},1,2,3都会留在寄存器栈上,{或者说newtable指令阻碍了这些变量被加入table.因此只要很有限的数据就会导致读取失败。

虽然不影响手写,但把数据序列化为代码无法避免这种情况。我自己写了个随机表生成器来测试自己的序列化库,几千次就随机出这个bug了

名字: 自动排版 密码:

回复 | (2995) | 熊起 | 2018-01-21 01:46:19