示例#1
0
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;
  }
示例#2
0
文件: lstx.cpp 项目: jvprat/residual
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;
	}
示例#3
0
文件: lparser.c 项目: calandoa/zite
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);
  }