mirror of
https://github.com/lua/lua
synced 2026-09-27 00:28:25 +03:00
Bug: wrong code gen. for indices with comparisons
In function 'luaK_exp2val', used to generate code for indices: Macro 'hasjumps' does not consider the case when the whole expression is a "jump" (a test). In all other of its uses, the surrounding code ensures that the expression cannot be VJMP.
This commit is contained in:
parent
1bf4b80f1a
commit
8b752ddf14
2 changed files with 10 additions and 1 deletions
3
lcode.c
3
lcode.c
|
|
@ -31,6 +31,7 @@
|
|||
#include "lvm.h"
|
||||
|
||||
|
||||
/* (note that expressions VJMP also have jumps.) */
|
||||
#define hasjumps(e) ((e)->t != (e)->f)
|
||||
|
||||
|
||||
|
|
@ -991,7 +992,7 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
|
|||
** or it is a constant.
|
||||
*/
|
||||
void luaK_exp2val (FuncState *fs, expdesc *e) {
|
||||
if (hasjumps(e))
|
||||
if (e->k == VJMP || hasjumps(e))
|
||||
luaK_exp2anyreg(fs, e);
|
||||
else
|
||||
luaK_dischargevars(fs, e);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,14 @@
|
|||
|
||||
print "testing closures"
|
||||
|
||||
do -- bug in 5.4.7
|
||||
_ENV[true] = 10
|
||||
local function aux () return _ENV[1 < 2] end
|
||||
assert(aux() == 10)
|
||||
_ENV[true] = nil
|
||||
end
|
||||
|
||||
|
||||
local A,B = 0,{g=10}
|
||||
local function f(x)
|
||||
local a = {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue