aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lcode.c3
-rw-r--r--testes/closure.lua8
2 files changed, 10 insertions, 1 deletions
diff --git a/lcode.c b/lcode.c
index 87616140..3f78370c 100644
--- a/lcode.c
+++ b/lcode.c
@@ -35,6 +35,7 @@
35#define MAXREGS 255 35#define MAXREGS 255
36 36
37 37
38/* (note that expressions VJMP also have jumps.) */
38#define hasjumps(e) ((e)->t != (e)->f) 39#define hasjumps(e) ((e)->t != (e)->f)
39 40
40 41
@@ -985,7 +986,7 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
985** or it is a constant. 986** or it is a constant.
986*/ 987*/
987void luaK_exp2val (FuncState *fs, expdesc *e) { 988void luaK_exp2val (FuncState *fs, expdesc *e) {
988 if (hasjumps(e)) 989 if (e->k == VJMP || hasjumps(e))
989 luaK_exp2anyreg(fs, e); 990 luaK_exp2anyreg(fs, e);
990 else 991 else
991 luaK_dischargevars(fs, e); 992 luaK_dischargevars(fs, e);
diff --git a/testes/closure.lua b/testes/closure.lua
index ea038e82..37271472 100644
--- a/testes/closure.lua
+++ b/testes/closure.lua
@@ -3,6 +3,14 @@
3 3
4print "testing closures" 4print "testing closures"
5 5
6do -- bug in 5.4.7
7 _ENV[true] = 10
8 local function aux () return _ENV[1 < 2] end
9 assert(aux() == 10)
10 _ENV[true] = nil
11end
12
13
6local A,B = 0,{g=10} 14local A,B = 0,{g=10}
7local function f(x) 15local function f(x)
8 local a = {} 16 local a = {}