forked from coop-deluxe/sm64coopdx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Solves coop-deluxe#662.
- Loading branch information
Showing
29 changed files
with
4,204 additions
and
221 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* | ||
** $Id: lapi.h $ | ||
** Auxiliary functions from Lua API | ||
** See Copyright Notice in lua.h | ||
*/ | ||
|
||
#ifndef lapi_h | ||
#define lapi_h | ||
|
||
|
||
#include "llimits.h" | ||
#include "lstate.h" | ||
|
||
|
||
/* Increments 'L->top.p', checking for stack overflows */ | ||
#define api_incr_top(L) {L->top.p++; \ | ||
api_check(L, L->top.p <= L->ci->top.p, \ | ||
"stack overflow");} | ||
|
||
|
||
/* | ||
** If a call returns too many multiple returns, the callee may not have | ||
** stack space to accommodate all results. In this case, this macro | ||
** increases its stack space ('L->ci->top.p'). | ||
*/ | ||
#define adjustresults(L,nres) \ | ||
{ if ((nres) <= LUA_MULTRET && L->ci->top.p < L->top.p) \ | ||
L->ci->top.p = L->top.p; } | ||
|
||
|
||
/* Ensure the stack has at least 'n' elements */ | ||
#define api_checknelems(L,n) \ | ||
api_check(L, (n) < (L->top.p - L->ci->func.p), \ | ||
"not enough elements in the stack") | ||
|
||
|
||
/* | ||
** To reduce the overhead of returning from C functions, the presence of | ||
** to-be-closed variables in these functions is coded in the CallInfo's | ||
** field 'nresults', in a way that functions with no to-be-closed variables | ||
** with zero, one, or "all" wanted results have no overhead. Functions | ||
** with other number of wanted results, as well as functions with | ||
** variables to be closed, have an extra check. | ||
*/ | ||
|
||
#define hastocloseCfunc(n) ((n) < LUA_MULTRET) | ||
|
||
/* Map [-1, inf) (range of 'nresults') into (-inf, -2] */ | ||
#define codeNresults(n) (-(n) - 3) | ||
#define decodeNresults(n) (-(n) - 3) | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
/* | ||
** $Id: lcode.h $ | ||
** Code generator for Lua | ||
** See Copyright Notice in lua.h | ||
*/ | ||
|
||
#ifndef lcode_h | ||
#define lcode_h | ||
|
||
#include "llex.h" | ||
#include "lobject.h" | ||
#include "lopcodes.h" | ||
#include "lparser.h" | ||
|
||
|
||
/* | ||
** Marks the end of a patch list. It is an invalid value both as an absolute | ||
** address, and as a list link (would link an element to itself). | ||
*/ | ||
#define NO_JUMP (-1) | ||
|
||
|
||
/* | ||
** grep "ORDER OPR" if you change these enums (ORDER OP) | ||
*/ | ||
typedef enum BinOpr { | ||
/* arithmetic operators */ | ||
OPR_ADD, OPR_SUB, OPR_MUL, OPR_MOD, OPR_POW, | ||
OPR_DIV, OPR_IDIV, | ||
/* bitwise operators */ | ||
OPR_BAND, OPR_BOR, OPR_BXOR, | ||
OPR_SHL, OPR_SHR, | ||
/* string operator */ | ||
OPR_CONCAT, | ||
/* comparison operators */ | ||
OPR_EQ, OPR_LT, OPR_LE, | ||
OPR_NE, OPR_GT, OPR_GE, | ||
/* logical operators */ | ||
OPR_AND, OPR_OR, | ||
OPR_NOBINOPR | ||
} BinOpr; | ||
|
||
|
||
/* true if operation is foldable (that is, it is arithmetic or bitwise) */ | ||
#define foldbinop(op) ((op) <= OPR_SHR) | ||
|
||
|
||
#define luaK_codeABC(fs,o,a,b,c) luaK_codeABCk(fs,o,a,b,c,0) | ||
|
||
|
||
typedef enum UnOpr { OPR_MINUS, OPR_BNOT, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; | ||
|
||
|
||
/* get (pointer to) instruction of given 'expdesc' */ | ||
#define getinstruction(fs,e) ((fs)->f->code[(e)->u.info]) | ||
|
||
|
||
#define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) | ||
|
||
#define luaK_jumpto(fs,t) luaK_patchlist(fs, luaK_jump(fs), t) | ||
|
||
LUAI_FUNC int luaK_code (FuncState *fs, Instruction i); | ||
LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); | ||
LUAI_FUNC int luaK_codeABCk (FuncState *fs, OpCode o, int A, | ||
int B, int C, int k); | ||
LUAI_FUNC int luaK_exp2const (FuncState *fs, const expdesc *e, TValue *v); | ||
LUAI_FUNC void luaK_fixline (FuncState *fs, int line); | ||
LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); | ||
LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); | ||
LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); | ||
LUAI_FUNC void luaK_int (FuncState *fs, int reg, lua_Integer n); | ||
LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); | ||
LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); | ||
LUAI_FUNC void luaK_exp2anyregup (FuncState *fs, expdesc *e); | ||
LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); | ||
LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); | ||
LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); | ||
LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); | ||
LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); | ||
LUAI_FUNC void luaK_goiffalse (FuncState *fs, expdesc *e); | ||
LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); | ||
LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); | ||
LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); | ||
LUAI_FUNC int luaK_jump (FuncState *fs); | ||
LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); | ||
LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); | ||
LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); | ||
LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); | ||
LUAI_FUNC int luaK_getlabel (FuncState *fs); | ||
LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v, int line); | ||
LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); | ||
LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, | ||
expdesc *v2, int line); | ||
LUAI_FUNC void luaK_settablesize (FuncState *fs, int pc, | ||
int ra, int asize, int hsize); | ||
LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); | ||
LUAI_FUNC void luaK_finish (FuncState *fs); | ||
LUAI_FUNC l_noret luaK_semerror (LexState *ls, const char *msg); | ||
|
||
|
||
#endif |
Oops, something went wrong.