mirror of
https://github.com/lua/lua
synced 2024-11-23 05:11:45 +03:00
23e6bac8a0
When calling metamethods for things like 'a < 3.0', which generates the opcode OP_LTI, the C register tells that the operand was converted to an integer, so that it can be corrected to float when calling a metamethod. This commit also includes some other stuff: - file 'onelua.c' added to the project - opcode OP_PREPVARARG renamed to OP_VARARGPREP - comparison opcodes rewritten through macros
114 lines
1.6 KiB
C
114 lines
1.6 KiB
C
/*
|
|
** $Id: ljumptab.h $
|
|
** Jump Table for the Lua interpreter
|
|
** See Copyright Notice in lua.h
|
|
*/
|
|
|
|
|
|
#undef vmdispatch
|
|
#undef vmcase
|
|
#undef vmbreak
|
|
|
|
#define vmdispatch(x) goto *disptab[x];
|
|
|
|
#define vmcase(l) L_##l:
|
|
|
|
#define vmbreak vmfetch(); vmdispatch(GET_OPCODE(i));
|
|
|
|
|
|
static void *disptab[NUM_OPCODES] = {
|
|
|
|
#if 0
|
|
** you can update the following list with this command:
|
|
**
|
|
** sed -n '/^OP_/\!d; s/OP_/\&\&L_OP_/ ; s/,.*/,/ ; s/\/.*// ; p' lopcodes.h
|
|
**
|
|
#endif
|
|
|
|
&&L_OP_MOVE,
|
|
&&L_OP_LOADI,
|
|
&&L_OP_LOADF,
|
|
&&L_OP_LOADK,
|
|
&&L_OP_LOADKX,
|
|
&&L_OP_LOADBOOL,
|
|
&&L_OP_LOADNIL,
|
|
&&L_OP_GETUPVAL,
|
|
&&L_OP_SETUPVAL,
|
|
&&L_OP_GETTABUP,
|
|
&&L_OP_GETTABLE,
|
|
&&L_OP_GETI,
|
|
&&L_OP_GETFIELD,
|
|
&&L_OP_SETTABUP,
|
|
&&L_OP_SETTABLE,
|
|
&&L_OP_SETI,
|
|
&&L_OP_SETFIELD,
|
|
&&L_OP_NEWTABLE,
|
|
&&L_OP_SELF,
|
|
&&L_OP_ADDI,
|
|
&&L_OP_SUBI,
|
|
&&L_OP_MULI,
|
|
&&L_OP_MODI,
|
|
&&L_OP_POWI,
|
|
&&L_OP_DIVI,
|
|
&&L_OP_IDIVI,
|
|
&&L_OP_ADDK,
|
|
&&L_OP_SUBK,
|
|
&&L_OP_MULK,
|
|
&&L_OP_MODK,
|
|
&&L_OP_POWK,
|
|
&&L_OP_DIVK,
|
|
&&L_OP_IDIVK,
|
|
&&L_OP_BANDK,
|
|
&&L_OP_BORK,
|
|
&&L_OP_BXORK,
|
|
&&L_OP_SHRI,
|
|
&&L_OP_SHLI,
|
|
&&L_OP_ADD,
|
|
&&L_OP_SUB,
|
|
&&L_OP_MUL,
|
|
&&L_OP_MOD,
|
|
&&L_OP_POW,
|
|
&&L_OP_DIV,
|
|
&&L_OP_IDIV,
|
|
&&L_OP_BAND,
|
|
&&L_OP_BOR,
|
|
&&L_OP_BXOR,
|
|
&&L_OP_SHL,
|
|
&&L_OP_SHR,
|
|
&&L_OP_UNM,
|
|
&&L_OP_BNOT,
|
|
&&L_OP_NOT,
|
|
&&L_OP_LEN,
|
|
&&L_OP_CONCAT,
|
|
&&L_OP_CLOSE,
|
|
&&L_OP_TBC,
|
|
&&L_OP_JMP,
|
|
&&L_OP_EQ,
|
|
&&L_OP_LT,
|
|
&&L_OP_LE,
|
|
&&L_OP_EQK,
|
|
&&L_OP_EQI,
|
|
&&L_OP_LTI,
|
|
&&L_OP_LEI,
|
|
&&L_OP_GTI,
|
|
&&L_OP_GEI,
|
|
&&L_OP_TEST,
|
|
&&L_OP_TESTSET,
|
|
&&L_OP_CALL,
|
|
&&L_OP_TAILCALL,
|
|
&&L_OP_RETURN,
|
|
&&L_OP_RETURN0,
|
|
&&L_OP_RETURN1,
|
|
&&L_OP_FORLOOP,
|
|
&&L_OP_FORPREP,
|
|
&&L_OP_TFORPREP,
|
|
&&L_OP_TFORCALL,
|
|
&&L_OP_TFORLOOP,
|
|
&&L_OP_SETLIST,
|
|
&&L_OP_CLOSURE,
|
|
&&L_OP_VARARG,
|
|
&&L_OP_VARARGPREP,
|
|
&&L_OP_EXTRAARG
|
|
|
|
};
|