mirror of
https://github.com/lua/lua.git
synced 2025-01-14 05:43:00 +08:00
5ff408d218
Instead of an explicit value (field 'b'), true and false use different tag variants. This avoids reading an extra field and results in more direct code. (Most code that uses booleans needs to distinguish between true and false anyway.)
112 lines
1.6 KiB
C
112 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_LOADFALSE,
|
|
&&L_OP_LOADTRUE,
|
|
&&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_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_MMBIN,
|
|
&&L_OP_MMBINI,
|
|
&&L_OP_MMBINK,
|
|
&&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
|
|
|
|
};
|