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:
3
lcode.c
3
lcode.c
@@ -31,6 +31,7 @@
|
|||||||
#include "lvm.h"
|
#include "lvm.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* (note that expressions VJMP also have jumps.) */
|
||||||
#define hasjumps(e) ((e)->t != (e)->f)
|
#define hasjumps(e) ((e)->t != (e)->f)
|
||||||
|
|
||||||
|
|
||||||
@@ -991,7 +992,7 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
|
|||||||
** or it is a constant.
|
** or it is a constant.
|
||||||
*/
|
*/
|
||||||
void luaK_exp2val (FuncState *fs, expdesc *e) {
|
void luaK_exp2val (FuncState *fs, expdesc *e) {
|
||||||
if (hasjumps(e))
|
if (e->k == VJMP || hasjumps(e))
|
||||||
luaK_exp2anyreg(fs, e);
|
luaK_exp2anyreg(fs, e);
|
||||||
else
|
else
|
||||||
luaK_dischargevars(fs, e);
|
luaK_dischargevars(fs, e);
|
||||||
|
|||||||
@@ -3,6 +3,14 @@
|
|||||||
|
|
||||||
print "testing closures"
|
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 A,B = 0,{g=10}
|
||||||
local function f(x)
|
local function f(x)
|
||||||
local a = {}
|
local a = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user