| 4010 | |
| 4011 | |
| 4012 | static void discharge2reg (FuncState *fs, expdesc *e, int reg) { |
| 4013 | luaK_dischargevars(fs, e); |
| 4014 | switch (e->k) { |
| 4015 | case VNIL: { |
| 4016 | luaK_nil(fs, reg, 1); |
| 4017 | break; |
| 4018 | } |
| 4019 | case VFALSE: case VTRUE: { |
| 4020 | luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); |
| 4021 | break; |
| 4022 | } |
| 4023 | case VK: { |
| 4024 | luaK_codeABx(fs, OP_LOADK, reg, e->u.s.info); |
| 4025 | break; |
| 4026 | } |
| 4027 | case VKNUM: { |
| 4028 | luaK_codeABx(fs, OP_LOADK, reg, luaK_numberK(fs, e->u.nval)); |
| 4029 | break; |
| 4030 | } |
| 4031 | case VRELOCABLE: { |
| 4032 | Instruction *pc = &getcode(fs, e); |
| 4033 | SETARG_A(*pc, reg); |
| 4034 | break; |
| 4035 | } |
| 4036 | case VNONRELOC: { |
| 4037 | if (reg != e->u.s.info) |
| 4038 | luaK_codeABC(fs, OP_MOVE, reg, e->u.s.info, 0); |
| 4039 | break; |
| 4040 | } |
| 4041 | default: { |
| 4042 | lua_assert(e->k == VVOID || e->k == VJMP); |
| 4043 | return; /* nothing to do... */ |
| 4044 | } |
| 4045 | } |
| 4046 | e->u.s.info = reg; |
| 4047 | e->k = VNONRELOC; |
| 4048 | } |
| 4049 | |
| 4050 | |
| 4051 | static void discharge2anyreg (FuncState *fs, expdesc *e) { |
no test coverage detected