diff options
| -rw-r--r-- | bugs | 28 | ||||
| -rw-r--r-- | lcode.c | 9 |
2 files changed, 32 insertions, 5 deletions
| @@ -3652,9 +3652,9 @@ It needs an "interceptor" 'memcmp' function that continues | |||
| 3652 | reading memory after a difference is found.]], | 3652 | reading memory after a difference is found.]], |
| 3653 | patch = [[ | 3653 | patch = [[ |
| 3654 | 2c2 | 3654 | 2c2 |
| 3655 | < ** $Id: loslib.c,v 1.64 2016/04/18 13:06:55 roberto Exp roberto $ | 3655 | < ** $Id: bugs,v 1.149 2016/07/15 17:24:09 roberto Exp roberto $ |
| 3656 | --- | 3656 | --- |
| 3657 | > ** $Id: loslib.c,v 1.64 2016/04/18 13:06:55 roberto Exp $ | 3657 | > ** $Id: bugs,v 1.149 2016/07/15 17:24:09 roberto Exp roberto $ |
| 3658 | 263c263,264 | 3658 | 263c263,264 |
| 3659 | < for (option = LUA_STRFTIMEOPTIONS; *option != '\0'; option += oplen) { | 3659 | < for (option = LUA_STRFTIMEOPTIONS; *option != '\0'; option += oplen) { |
| 3660 | --- | 3660 | --- |
| @@ -3664,6 +3664,30 @@ patch = [[ | |||
| 3664 | } | 3664 | } |
| 3665 | 3665 | ||
| 3666 | 3666 | ||
| 3667 | Bug{ | ||
| 3668 | what = [[Lua can generate wrong code in functions with too many constants]], | ||
| 3669 | report = [[Marco Schöpl, 2016/07/17]], | ||
| 3670 | since = [[5.3.3]], | ||
| 3671 | fix = nil, | ||
| 3672 | example = [[See http://lua-users.org/lists/lua-l/2016-07/msg00303.html]], | ||
| 3673 | patch = [[ | ||
| 3674 | --- lcode.c 2016/06/20 19:12:46 2.110 | ||
| 3675 | +++ lcode.c 2016/07/18 15:43:41 | ||
| 3676 | @@ -1018,8 +1018,8 @@ | ||
| 3677 | */ | ||
| 3678 | static void codebinexpval (FuncState *fs, OpCode op, | ||
| 3679 | expdesc *e1, expdesc *e2, int line) { | ||
| 3680 | - int rk1 = luaK_exp2RK(fs, e1); /* both operands are "RK" */ | ||
| 3681 | - int rk2 = luaK_exp2RK(fs, e2); | ||
| 3682 | + int rk2 = luaK_exp2RK(fs, e2); /* both operands are "RK" */ | ||
| 3683 | + int rk1 = luaK_exp2RK(fs, e1); | ||
| 3684 | freeexps(fs, e1, e2); | ||
| 3685 | e1->u.info = luaK_codeABC(fs, op, 0, rk1, rk2); /* generate opcode */ | ||
| 3686 | e1->k = VRELOCABLE; /* all those operations are relocatable */ | ||
| 3687 | ]] | ||
| 3688 | } | ||
| 3689 | |||
| 3690 | |||
| 3667 | --[=[ | 3691 | --[=[ |
| 3668 | Bug{ | 3692 | Bug{ |
| 3669 | what = [[ ]], | 3693 | what = [[ ]], |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lcode.c,v 2.109 2016/05/13 19:09:21 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 2.110 2016/06/20 19:12:46 roberto Exp roberto $ |
| 3 | ** Code generator for Lua | 3 | ** Code generator for Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -1015,11 +1015,14 @@ static void codeunexpval (FuncState *fs, OpCode op, expdesc *e, int line) { | |||
| 1015 | ** (everything but logical operators 'and'/'or' and comparison | 1015 | ** (everything but logical operators 'and'/'or' and comparison |
| 1016 | ** operators). | 1016 | ** operators). |
| 1017 | ** Expression to produce final result will be encoded in 'e1'. | 1017 | ** Expression to produce final result will be encoded in 'e1'. |
| 1018 | ** Because 'luaK_exp2RK' can free registers, its calls must be | ||
| 1019 | ** in "stack order" (that is, first on 'e2', which may have more | ||
| 1020 | ** recent registers to be released). | ||
| 1018 | */ | 1021 | */ |
| 1019 | static void codebinexpval (FuncState *fs, OpCode op, | 1022 | static void codebinexpval (FuncState *fs, OpCode op, |
| 1020 | expdesc *e1, expdesc *e2, int line) { | 1023 | expdesc *e1, expdesc *e2, int line) { |
| 1021 | int rk1 = luaK_exp2RK(fs, e1); /* both operands are "RK" */ | 1024 | int rk2 = luaK_exp2RK(fs, e2); /* both operands are "RK" */ |
| 1022 | int rk2 = luaK_exp2RK(fs, e2); | 1025 | int rk1 = luaK_exp2RK(fs, e1); |
| 1023 | freeexps(fs, e1, e2); | 1026 | freeexps(fs, e1, e2); |
| 1024 | e1->u.info = luaK_codeABC(fs, op, 0, rk1, rk2); /* generate opcode */ | 1027 | e1->u.info = luaK_codeABC(fs, op, 0, rk1, rk2); /* generate opcode */ |
| 1025 | e1->k = VRELOCABLE; /* all those operations are relocatable */ | 1028 | e1->k = VRELOCABLE; /* all those operations are relocatable */ |
