diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-09-21 10:31:03 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-10-12 12:29:09 -0300 |
commit | 5d8ce05b3f6fad79e37ed21c1076e47a322472c6 (patch) | |
tree | 7629a59887da63d44267e872bc8e33be6db36582 /lparser.c | |
parent | f83de8e34e24e30acf277f60de62a33bd51d1ddd (diff) | |
download | lua-github-5d8ce05b3f6fad79e37ed21c1076e47a322472c6.tar.gz |
Back to a stackless implementation
A "with stack" implementation gains too little in performance to be
worth all the noise from C-stack overflows.
This commit is almost a sketch, to test performance. There are several
pending stuff:
- review control of C-stack overflow and error messages;
- what to do with setcstacklimit;
- review comments;
- review unroll of Lua calls.
Diffstat (limited to 'lparser.c')
-rw-r--r-- | lparser.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -489,12 +489,14 @@ static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { } -/* -** Macros to limit the maximum recursion depth while parsing -*/ -#define enterlevel(ls) luaE_enterCcall((ls)->L) +static void enterlevel (LexState *ls) { + lua_State *L = ls->L; + L->nCcalls++; + checklimit(ls->fs, getCcalls(L), LUAI_MAXCCALLS, "C levels"); +} + -#define leavelevel(ls) luaE_exitCcall((ls)->L) +#define leavelevel(ls) ((ls)->L->nCcalls--) /* |