3 ** Code generator for Lua
4 ** See Copyright Notice in lua.h
17 ** Marks the end of a patch list. It is an invalid value both as an absolute
18 ** address, and as a list link (would link an element to itself).
24 ** grep "ORDER OPR" if you change these enums (ORDER OP)
27 /* arithmetic operators */
28 OPR_ADD
, OPR_SUB
, OPR_MUL
, OPR_MOD
, OPR_POW
,
30 /* bitwise operators */
31 OPR_BAND
, OPR_BOR
, OPR_BXOR
,
35 /* comparison operators */
36 OPR_EQ
, OPR_LT
, OPR_LE
,
37 OPR_NE
, OPR_GT
, OPR_GE
,
38 /* logical operators */
44 /* true if operation is foldable (that is, it is arithmetic or bitwise) */
45 #define foldbinop(op) ((op) <= OPR_SHR)
48 #define luaK_codeABC(fs,o,a,b,c) luaK_codeABCk(fs,o,a,b,c,0)
51 typedef enum UnOpr
{ OPR_MINUS
, OPR_BNOT
, OPR_NOT
, OPR_LEN
, OPR_NOUNOPR
} UnOpr
;
54 /* get (pointer to) instruction of given 'expdesc' */
55 #define getinstruction(fs,e) ((fs)->f->code[(e)->u.info])
58 #define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET)
60 #define luaK_jumpto(fs,t) luaK_patchlist(fs, luaK_jump(fs), t)
62 LUAI_FUNC
int luaK_code(FuncState
*fs
, Instruction i
);
63 LUAI_FUNC
int luaK_codeABx(FuncState
*fs
, OpCode o
, int A
, unsigned int Bx
);
64 LUAI_FUNC
int luaK_codeABCk(FuncState
*fs
, OpCode o
, int A
,
66 LUAI_FUNC
int luaK_exp2const(FuncState
*fs
, const expdesc
*e
, TValue
*v
);
67 LUAI_FUNC
void luaK_fixline(FuncState
*fs
, int line
);
68 LUAI_FUNC
void luaK_nil(FuncState
*fs
, int from
, int n
);
69 LUAI_FUNC
void luaK_reserveregs(FuncState
*fs
, int n
);
70 LUAI_FUNC
void luaK_checkstack(FuncState
*fs
, int n
);
71 LUAI_FUNC
void luaK_int(FuncState
*fs
, int reg
, lua_Integer n
);
72 LUAI_FUNC
void luaK_dischargevars(FuncState
*fs
, expdesc
*e
);
73 LUAI_FUNC
int luaK_exp2anyreg(FuncState
*fs
, expdesc
*e
);
74 LUAI_FUNC
void luaK_exp2anyregup(FuncState
*fs
, expdesc
*e
);
75 LUAI_FUNC
void luaK_exp2nextreg(FuncState
*fs
, expdesc
*e
);
76 LUAI_FUNC
void luaK_exp2val(FuncState
*fs
, expdesc
*e
);
77 LUAI_FUNC
void luaK_self(FuncState
*fs
, expdesc
*e
, expdesc
*key
);
78 LUAI_FUNC
void luaK_indexed(FuncState
*fs
, expdesc
*t
, expdesc
*k
);
79 LUAI_FUNC
void luaK_goiftrue(FuncState
*fs
, expdesc
*e
);
80 LUAI_FUNC
void luaK_goiffalse(FuncState
*fs
, expdesc
*e
);
81 LUAI_FUNC
void luaK_storevar(FuncState
*fs
, expdesc
*var
, expdesc
*e
);
82 LUAI_FUNC
void luaK_setreturns(FuncState
*fs
, expdesc
*e
, int nresults
);
83 LUAI_FUNC
void luaK_setoneret(FuncState
*fs
, expdesc
*e
);
84 LUAI_FUNC
int luaK_jump(FuncState
*fs
);
85 LUAI_FUNC
void luaK_ret(FuncState
*fs
, int first
, int nret
);
86 LUAI_FUNC
void luaK_patchlist(FuncState
*fs
, int list
, int target
);
87 LUAI_FUNC
void luaK_patchtohere(FuncState
*fs
, int list
);
88 LUAI_FUNC
void luaK_concat(FuncState
*fs
, int *l1
, int l2
);
89 LUAI_FUNC
int luaK_getlabel(FuncState
*fs
);
90 LUAI_FUNC
void luaK_prefix(FuncState
*fs
, UnOpr op
, expdesc
*v
, int line
);
91 LUAI_FUNC
void luaK_infix(FuncState
*fs
, BinOpr op
, expdesc
*v
);
92 LUAI_FUNC
void luaK_posfix(FuncState
*fs
, BinOpr op
, expdesc
*v1
,
93 expdesc
*v2
, int line
);
94 LUAI_FUNC
void luaK_settablesize(FuncState
*fs
, int pc
,
95 int ra
, int asize
, int hsize
);
96 LUAI_FUNC
void luaK_setlist(FuncState
*fs
, int base
, int nelems
, int tostore
);
97 LUAI_FUNC
void luaK_finish(FuncState
*fs
);
98 LUAI_FUNC l_noret
luaK_semerror(LexState
*ls
, const char *msg
);