diff options
Diffstat (limited to '')
| -rw-r--r-- | lcode.c | 11 |
1 files changed, 11 insertions, 0 deletions
| @@ -273,6 +273,11 @@ void luaK_dischargevars (FuncState *fs, expdesc *e) { | |||
| 273 | e->k = VNONRELOC; | 273 | e->k = VNONRELOC; |
| 274 | break; | 274 | break; |
| 275 | } | 275 | } |
| 276 | case VUPVAL: { | ||
| 277 | e->u.i.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.i.info, 0); | ||
| 278 | e->k = VRELOCABLE; | ||
| 279 | break; | ||
| 280 | } | ||
| 276 | case VGLOBAL: { | 281 | case VGLOBAL: { |
| 277 | e->u.i.info = luaK_codeABc(fs, OP_GETGLOBAL, 0, e->u.i.info); | 282 | e->u.i.info = luaK_codeABc(fs, OP_GETGLOBAL, 0, e->u.i.info); |
| 278 | e->k = VRELOCABLE; | 283 | e->k = VRELOCABLE; |
| @@ -437,6 +442,12 @@ void luaK_storevar (FuncState *fs, expdesc *var, expdesc *exp) { | |||
| 437 | luaK_exp2reg(fs, exp, var->u.i.info); | 442 | luaK_exp2reg(fs, exp, var->u.i.info); |
| 438 | break; | 443 | break; |
| 439 | } | 444 | } |
| 445 | case VUPVAL: { | ||
| 446 | int e = luaK_exp2anyreg(fs, exp); | ||
| 447 | freereg(fs, e); | ||
| 448 | luaK_codeABC(fs, OP_SETUPVAL, e, var->u.i.info, 0); | ||
| 449 | break; | ||
| 450 | } | ||
| 440 | case VGLOBAL: { | 451 | case VGLOBAL: { |
| 441 | int e = luaK_exp2anyreg(fs, exp); | 452 | int e = luaK_exp2anyreg(fs, exp); |
| 442 | freereg(fs, e); | 453 | freereg(fs, e); |
