@ -390,32 +390,40 @@ int luaK_code (FuncState *fs, Instruction i) {
* * Format and emit an ' iABC ' instruction . ( Assertions check consistency
* * of parameters versus opcode . )
*/
int luaK_codeABCk ( FuncState * fs , OpCode o , int a , int b , int c , int k ) {
int luaK_codeABCk ( FuncState * fs , OpCode o , int A , int B , int C , int k ) {
lua_assert ( getOpMode ( o ) = = iABC ) ;
lua_assert ( a < = MAXARG_A & & b < = MAXARG_B & &
c < = MAXARG_C & & ( k & ~ 1 ) = = 0 ) ;
return luaK_code ( fs , CREATE_ABCk ( o , a , b , c , k ) ) ;
lua_assert ( A < = MAXARG_A & & B < = MAXARG_B & &
C < = MAXARG_C & & ( k & ~ 1 ) = = 0 ) ;
return luaK_code ( fs , CREATE_ABCk ( o , A , B , C , k ) ) ;
}
int luaK_codevABCk ( FuncState * fs , OpCode o , int A , int B , int C , int k ) {
lua_assert ( getOpMode ( o ) = = ivABC ) ;
lua_assert ( A < = MAXARG_A & & B < = MAXARG_vB & &
C < = MAXARG_vC & & ( k & ~ 1 ) = = 0 ) ;
return luaK_code ( fs , CREATE_vABCk ( o , A , B , C , k ) ) ;
}
/*
* * Format and emit an ' iABx ' instruction .
*/
int luaK_codeABx ( FuncState * fs , OpCode o , int a , unsigned int bc ) {
int luaK_codeABx ( FuncState * fs , OpCode o , int A , unsigned int B c) {
lua_assert ( getOpMode ( o ) = = iABx ) ;
lua_assert ( a < = MAXARG_A & & b c < = MAXARG_Bx ) ;
return luaK_code ( fs , CREATE_ABx ( o , a , b c) ) ;
lua_assert ( A < = MAXARG_A & & B c < = MAXARG_Bx ) ;
return luaK_code ( fs , CREATE_ABx ( o , A , B c) ) ;
}
/*
* * Format and emit an ' iAsBx ' instruction .
*/
static int codeAsBx ( FuncState * fs , OpCode o , int a , int b c) {
unsigned int b = bc + OFFSET_sBx ;
static int codeAsBx ( FuncState * fs , OpCode o , int A , int B c) {
unsigned int b = cast_uint ( Bc ) + OFFSET_sBx ;
lua_assert ( getOpMode ( o ) = = iAsBx ) ;
lua_assert ( a < = MAXARG_A & & b < = MAXARG_Bx ) ;
return luaK_code ( fs , CREATE_ABx ( o , a , b ) ) ;
lua_assert ( A < = MAXARG_A & & b < = MAXARG_Bx ) ;
return luaK_code ( fs , CREATE_ABx ( o , A , b ) ) ;
}
@ -423,7 +431,7 @@ static int codeAsBx (FuncState *fs, OpCode o, int a, int bc) {
* * Format and emit an ' isJ ' instruction .
*/
static int codesJ ( FuncState * fs , OpCode o , int sj , int k ) {
unsigned int j = sj + OFFSET_sJ ;
unsigned int j = cast_uint ( sj ) + OFFSET_sJ ;
lua_assert ( getOpMode ( o ) = = isJ ) ;
lua_assert ( j < = MAXARG_sJ & & ( k & ~ 1 ) = = 0 ) ;
return luaK_code ( fs , CREATE_sJ ( o , j , k ) ) ;
@ -433,9 +441,9 @@ static int codesJ (FuncState *fs, OpCode o, int sj, int k) {
/*
* * Emit an " extra argument " instruction ( format ' iAx ' )
*/
static int codeextraarg ( FuncState * fs , int a ) {
lua_assert ( a < = MAXARG_Ax ) ;
return luaK_code ( fs , CREATE_Ax ( OP_EXTRAARG , a ) ) ;
static int codeextraarg ( FuncState * fs , int A ) {
lua_assert ( A < = MAXARG_Ax ) ;
return luaK_code ( fs , CREATE_Ax ( OP_EXTRAARG , A ) ) ;
}
@ -1032,10 +1040,10 @@ static int exp2RK (FuncState *fs, expdesc *e) {
}
static void codeABRK ( FuncState * fs , OpCode o , int a , int b ,
static void codeABRK ( FuncState * fs , OpCode o , int A , int B ,
expdesc * ec ) {
int k = exp2RK ( fs , ec ) ;
luaK_codeABCk ( fs , o , a , b , ec - > u . info , k ) ;
luaK_codeABCk ( fs , o , A , B , ec - > u . info , k ) ;
}
@ -1788,10 +1796,10 @@ void luaK_fixline (FuncState *fs, int line) {
void luaK_settablesize ( FuncState * fs , int pc , int ra , int asize , int hsize ) {
Instruction * inst = & fs - > f - > code [ pc ] ;
int rb = ( hsize ! = 0 ) ? luaO_ceillog2 ( hsize ) + 1 : 0 ; /* hash size */
int extra = asize / ( MAXARG_C + 1 ) ; /* higher bits of array size */
int rc = asize % ( MAXARG_C + 1 ) ; /* lower bits of array size */
int extra = asize / ( MAXARG_v C + 1 ) ; /* higher bits of array size */
int rc = asize % ( MAXARG_v C + 1 ) ; /* lower bits of array size */
int k = ( extra > 0 ) ; /* true iff needs extra argument */
* inst = CREATE_ABCk ( OP_NEWTABLE , ra , rb , rc , k ) ;
* inst = CREATE_v ABCk ( OP_NEWTABLE , ra , rb , rc , k ) ;
* ( inst + 1 ) = CREATE_Ax ( OP_EXTRAARG , extra ) ;
}
@ -1807,12 +1815,12 @@ void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) {
lua_assert ( tostore ! = 0 ) ;
if ( tostore = = LUA_MULTRET )
tostore = 0 ;
if ( nelems < = MAXARG_C )
luaK_codeABC ( fs , OP_SETLIST , base , tostore , nelems ) ;
if ( nelems < = MAXARG_v C )
luaK_codev ABCk ( fs , OP_SETLIST , base , tostore , nelems , 0 ) ;
else {
int extra = nelems / ( MAXARG_C + 1 ) ;
nelems % = ( MAXARG_C + 1 ) ;
luaK_codeABCk ( fs , OP_SETLIST , base , tostore , nelems , 1 ) ;
int extra = nelems / ( MAXARG_v C + 1 ) ;
nelems % = ( MAXARG_v C + 1 ) ;
luaK_codev ABCk ( fs , OP_SETLIST , base , tostore , nelems , 1 ) ;
codeextraarg ( fs , extra ) ;
}
fs - > freereg = base + 1 ; /* free registers with list values */
@ -1839,6 +1847,7 @@ static int finaltarget (Instruction *code, int i) {
* * Do a final pass over the code of a function , doing small peephole
* * optimizations and adjustments .
*/
# include "lopnames.h"
void luaK_finish ( FuncState * fs ) {
int i ;
Proto * p = fs - > f ;