Browse Source

new auxiliary function 'luaK_isKint' + removal of 'luaK_needclose',
which was not being used anywhere.

Roberto Ierusalimschy 7 years ago
parent
commit
ab07005568
2 changed files with 12 additions and 18 deletions
  1. 10 16
      lcode.c
  2. 2 2
      lcode.h

+ 10 - 16
lcode.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lcode.c,v 2.144 2017/12/14 14:24:02 roberto Exp roberto $
+** $Id: lcode.c,v 2.145 2017/12/15 18:53:48 roberto Exp roberto $
 ** Code generator for Lua
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -259,18 +259,6 @@ void luaK_patchtohere (FuncState *fs, int list) {
 }
 }
 
 
 
 
-/*
-** Check whether some jump in given list needs a close instruction.
-*/
-int luaK_needclose (FuncState *fs, int list) {
-  for (; list != NO_JUMP; list = getjump(fs, list)) {
-    if (GETARG_A(fs->f->code[list]))  /* needs close? */
-      return 1;
-  }
-  return 0;
-}
-
-
 /*
 /*
 ** Correct a jump list to jump to 'target'. If 'hasclose' is true,
 ** Correct a jump list to jump to 'target'. If 'hasclose' is true,
 ** 'target' contains an OP_CLOSE instruction (see first assert).
 ** 'target' contains an OP_CLOSE instruction (see first assert).
@@ -1090,14 +1078,20 @@ static int isKstr (FuncState *fs, expdesc *e) {
           ttisshrstring(&fs->f->k[e->u.info]));
           ttisshrstring(&fs->f->k[e->u.info]));
 }
 }
 
 
+/*
+** Check whether expression 'e' is a literal integer.
+*/
+int luaK_isKint (expdesc *e) {
+  return (e->k == VKINT && !hasjumps(e));
+}
+
 
 
 /*
 /*
 ** Check whether expression 'e' is a literal integer in
 ** Check whether expression 'e' is a literal integer in
 ** proper range to fit in register C
 ** proper range to fit in register C
 */
 */
 static int isCint (expdesc *e) {
 static int isCint (expdesc *e) {
-  return (e->k == VKINT && !hasjumps(e) &&
-          l_castS2U(e->u.ival) <= l_castS2U(MAXARG_C));
+  return luaK_isKint(e) && (l_castS2U(e->u.ival) <= l_castS2U(MAXARG_C));
 }
 }
 
 
 
 
@@ -1106,7 +1100,7 @@ static int isCint (expdesc *e) {
 ** proper range to fit in register sC
 ** proper range to fit in register sC
 */
 */
 static int isSCint (expdesc *e) {
 static int isSCint (expdesc *e) {
-  return (e->k == VKINT && !hasjumps(e) && fitsC(e->u.ival));
+  return luaK_isKint(e) && fitsC(e->u.ival);
 }
 }
 
 
 
 

+ 2 - 2
lcode.h

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lcode.h,v 1.68 2017/10/04 21:56:32 roberto Exp roberto $
+** $Id: lcode.h,v 1.69 2017/11/30 13:29:18 roberto Exp roberto $
 ** Code generator for Lua
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -55,6 +55,7 @@ LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx);
 LUAI_FUNC int luaK_codeAsBx (FuncState *fs, OpCode o, int A, int Bx);
 LUAI_FUNC int luaK_codeAsBx (FuncState *fs, OpCode o, int A, int Bx);
 LUAI_FUNC int luaK_codeABCk (FuncState *fs, OpCode o, int A,
 LUAI_FUNC int luaK_codeABCk (FuncState *fs, OpCode o, int A,
                                             int B, int C, int k);
                                             int B, int C, int k);
+LUAI_FUNC int luaK_isKint (expdesc *e);
 LUAI_FUNC void luaK_fixline (FuncState *fs, int line);
 LUAI_FUNC void luaK_fixline (FuncState *fs, int line);
 LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n);
 LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n);
 LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n);
 LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n);
@@ -80,7 +81,6 @@ LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target);
 void luaK_patchgoto (FuncState *fs, int list, int target, int hasclose);
 void luaK_patchgoto (FuncState *fs, int list, int target, int hasclose);
 LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list);
 LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list);
 LUAI_FUNC void luaK_patchclose (FuncState *fs, int list);
 LUAI_FUNC void luaK_patchclose (FuncState *fs, int list);
-LUAI_FUNC int luaK_needclose (FuncState *fs, int list);
 LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2);
 LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2);
 LUAI_FUNC int luaK_getlabel (FuncState *fs);
 LUAI_FUNC int luaK_getlabel (FuncState *fs);
 LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v, int line);
 LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v, int line);