This commit is contained in:
Roberto Ierusalimschy
2018-01-18 14:24:31 -02:00
parent d2fb34ac88
commit 28f215ecf8

24
lcode.c
View File

@@ -1,5 +1,5 @@
/* /*
** $Id: lcode.c,v 2.149 2018/01/09 11:21:41 roberto Exp $ ** $Id: lcode.c,v 2.149 2018/01/09 11:24:12 roberto Exp roberto $
** Code generator for Lua ** Code generator for Lua
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@@ -656,6 +656,7 @@ void luaK_setoneret (FuncState *fs, expdesc *e) {
/* /*
** Ensure that expression 'e' is not a variable. ** Ensure that expression 'e' is not a variable.
** (Expression still may have jump lists.)
*/ */
void luaK_dischargevars (FuncState *fs, expdesc *e) { void luaK_dischargevars (FuncState *fs, expdesc *e) {
switch (e->k) { switch (e->k) {
@@ -703,6 +704,7 @@ void luaK_dischargevars (FuncState *fs, expdesc *e) {
/* /*
** Ensures expression value is in register 'reg' (and therefore ** Ensures expression value is in register 'reg' (and therefore
** 'e' will become a non-relocatable expression). ** 'e' will become a non-relocatable expression).
** (Expression still may have jump lists.)
*/ */
static void discharge2reg (FuncState *fs, expdesc *e, int reg) { static void discharge2reg (FuncState *fs, expdesc *e, int reg) {
luaK_dischargevars(fs, e); luaK_dischargevars(fs, e);
@@ -749,6 +751,7 @@ static void discharge2reg (FuncState *fs, expdesc *e, int reg) {
/* /*
** Ensures expression value is in any register. ** Ensures expression value is in any register.
** (Expression still may have jump lists.)
*/ */
static void discharge2anyreg (FuncState *fs, expdesc *e) { static void discharge2anyreg (FuncState *fs, expdesc *e) {
if (e->k != VNONRELOC) { /* no fixed register yet? */ if (e->k != VNONRELOC) { /* no fixed register yet? */
@@ -778,8 +781,8 @@ static int need_value (FuncState *fs, int list) {
/* /*
** Ensures final expression result (including results from its jump ** Ensures final expression result (which includes results from its
** lists) is in register 'reg'. ** jump ** lists) is in register 'reg'.
** If expression has jumps, need to patch these jumps either to ** If expression has jumps, need to patch these jumps either to
** its final position or to "load" instructions (for those tests ** its final position or to "load" instructions (for those tests
** that do not produce values). ** that do not produce values).
@@ -809,8 +812,7 @@ static void exp2reg (FuncState *fs, expdesc *e, int reg) {
/* /*
** Ensures final expression result (including results from its jump ** Ensures final expression result is in next available register.
** lists) is in next available register.
*/ */
void luaK_exp2nextreg (FuncState *fs, expdesc *e) { void luaK_exp2nextreg (FuncState *fs, expdesc *e) {
luaK_dischargevars(fs, e); luaK_dischargevars(fs, e);
@@ -821,8 +823,8 @@ void luaK_exp2nextreg (FuncState *fs, expdesc *e) {
/* /*
** Ensures final expression result (including results from its jump ** Ensures final expression result is in some (any) register
** lists) is in some (any) register and return that register. ** and return that register.
*/ */
int luaK_exp2anyreg (FuncState *fs, expdesc *e) { int luaK_exp2anyreg (FuncState *fs, expdesc *e) {
luaK_dischargevars(fs, e); luaK_dischargevars(fs, e);
@@ -840,8 +842,8 @@ int luaK_exp2anyreg (FuncState *fs, expdesc *e) {
/* /*
** Ensures final expression result is either in a register or in an ** Ensures final expression result is either in a register
** upvalue. ** or in an upvalue.
*/ */
void luaK_exp2anyregup (FuncState *fs, expdesc *e) { void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
if (e->k != VUPVAL || hasjumps(e)) if (e->k != VUPVAL || hasjumps(e))
@@ -850,8 +852,8 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
/* /*
** Ensures final expression result is either in a register or it is ** Ensures final expression result is either in a register
** 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 (hasjumps(e))