static int32 code_oparg_at (LexState *ls, int32 pc, OpCode op, int32 builtin, int32 arg, int32 delta) { Byte *code = ls->fs->f->code; deltastack(ls, delta); if (arg < builtin) { code[pc] = op+1+arg; return 1; } else if (arg <= 255) { code[pc] = op; code[pc+1] = arg; return 2; } else if (arg <= MAX_WORD) { code[pc] = op+1+builtin; code[pc+2] = arg>>8; code[pc+1] = arg&0xFF; return 3; }
static int code_oparg_at (int pc, OpCode op, int builtin, int arg, int delta) { byte *code = lua_state->currState->f->code; deltastack(delta); if (arg < builtin) { code[pc] = op+1+arg; return 1; } else if (arg <= 255) { code[pc] = op; code[pc+1] = arg; return 2; } else if (arg <= (int)MAX_WORD) { code[pc] = op+1+builtin; code[pc+1] = arg&0xFF; code[pc+2] = arg>>8; return 3; }
static void code_oparg_at (LexState *ls, int pc, OpCode op, int arg, int delta) { Byte *code = ls->fs->f->code; deltastack(ls, delta); if (arg <= MAX_BYTE) { code[pc] = (Byte)op; code[pc+1] = (Byte)arg; } else if (arg > MAX_ARG) luaX_error(ls, "code too long"); else { /* MAX_BYTE < arg < MAX_ARG */ if (arg > MAX_WORD) { code[pc] = (Byte)LONGARG; code[pc+1] = (Byte)(arg>>16); pc += 2; } code[pc] = (Byte)(op-1); /* opcode for word argument */ code[pc+1] = (Byte)((arg&0xFFFF)>>8); code[pc+2] = (Byte)(arg&0xFF); }