diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-02-02 13:13:05 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-02-02 13:13:05 -0200 |
| commit | 426d3e43bdec4b1ab2b0aed1844396c27f64872f (patch) | |
| tree | 659b73e1e9720fb85c66a481b476c96671eef734 /ldo.c | |
| parent | 8823f371a2a63f634121a0c16cb1d02e5ce9f5c5 (diff) | |
| download | lua-426d3e43bdec4b1ab2b0aed1844396c27f64872f.tar.gz lua-426d3e43bdec4b1ab2b0aed1844396c27f64872f.tar.bz2 lua-426d3e43bdec4b1ab2b0aed1844396c27f64872f.zip | |
lock/unlock may use L + better structure for internal debug stuff
Diffstat (limited to 'ldo.c')
| -rw-r--r-- | ldo.c | 24 |
1 files changed, 12 insertions, 12 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldo.c,v 1.119 2001/01/29 19:34:02 roberto Exp roberto $ | 2 | ** $Id: ldo.c,v 1.120 2001/02/01 17:40:48 roberto Exp roberto $ |
| 3 | ** Stack and Call structure of Lua | 3 | ** Stack and Call structure of Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -94,9 +94,9 @@ static void dohook (lua_State *L, lua_Debug *ar, lua_Hook hook) { | |||
| 94 | StkId old_top = L->Cbase = L->top; | 94 | StkId old_top = L->Cbase = L->top; |
| 95 | luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ | 95 | luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ |
| 96 | L->allowhooks = 0; /* cannot call hooks inside a hook */ | 96 | L->allowhooks = 0; /* cannot call hooks inside a hook */ |
| 97 | LUA_UNLOCK; | 97 | LUA_UNLOCK(L); |
| 98 | (*hook)(L, ar); | 98 | (*hook)(L, ar); |
| 99 | LUA_LOCK; | 99 | LUA_LOCK(L); |
| 100 | lua_assert(L->allowhooks == 0); | 100 | lua_assert(L->allowhooks == 0); |
| 101 | L->allowhooks = 1; | 101 | L->allowhooks = 1; |
| 102 | L->top = old_top; | 102 | L->top = old_top; |
| @@ -135,9 +135,9 @@ static StkId callCclosure (lua_State *L, const struct Closure *cl, StkId base) { | |||
| 135 | luaD_checkstack(L, nup+LUA_MINSTACK); /* ensure minimum stack size */ | 135 | luaD_checkstack(L, nup+LUA_MINSTACK); /* ensure minimum stack size */ |
| 136 | for (n=0; n<nup; n++) /* copy upvalues as extra arguments */ | 136 | for (n=0; n<nup; n++) /* copy upvalues as extra arguments */ |
| 137 | setobj(L->top++, &cl->upvalue[n]); | 137 | setobj(L->top++, &cl->upvalue[n]); |
| 138 | LUA_UNLOCK; | 138 | LUA_UNLOCK(L); |
| 139 | n = (*cl->f.c)(L); /* do the actual call */ | 139 | n = (*cl->f.c)(L); /* do the actual call */ |
| 140 | LUA_LOCK; | 140 | LUA_LOCK(L); |
| 141 | L->Cbase = old_Cbase; /* restore old C base */ | 141 | L->Cbase = old_Cbase; /* restore old C base */ |
| 142 | return L->top - n; /* return index of first result */ | 142 | return L->top - n; /* return index of first result */ |
| 143 | } | 143 | } |
| @@ -219,13 +219,13 @@ LUA_API int lua_call (lua_State *L, int nargs, int nresults) { | |||
| 219 | StkId func; | 219 | StkId func; |
| 220 | struct CallS c; | 220 | struct CallS c; |
| 221 | int status; | 221 | int status; |
| 222 | LUA_LOCK; | 222 | LUA_LOCK(L); |
| 223 | func = L->top - (nargs+1); /* function to be called */ | 223 | func = L->top - (nargs+1); /* function to be called */ |
| 224 | c.func = func; c.nresults = nresults; | 224 | c.func = func; c.nresults = nresults; |
| 225 | status = luaD_runprotected(L, f_call, &c); | 225 | status = luaD_runprotected(L, f_call, &c); |
| 226 | if (status != 0) /* an error occurred? */ | 226 | if (status != 0) /* an error occurred? */ |
| 227 | L->top = func; /* remove parameters from the stack */ | 227 | L->top = func; /* remove parameters from the stack */ |
| 228 | LUA_UNLOCK; | 228 | LUA_UNLOCK(L); |
| 229 | return status; | 229 | return status; |
| 230 | } | 230 | } |
| 231 | 231 | ||
| @@ -233,23 +233,23 @@ LUA_API int lua_call (lua_State *L, int nargs, int nresults) { | |||
| 233 | /* | 233 | /* |
| 234 | ** Execute a protected parser. | 234 | ** Execute a protected parser. |
| 235 | */ | 235 | */ |
| 236 | struct ParserS { /* data to `f_parser' */ | 236 | struct SParser { /* data to `f_parser' */ |
| 237 | ZIO *z; | 237 | ZIO *z; |
| 238 | int bin; | 238 | int bin; |
| 239 | }; | 239 | }; |
| 240 | 240 | ||
| 241 | static void f_parser (lua_State *L, void *ud) { | 241 | static void f_parser (lua_State *L, void *ud) { |
| 242 | struct ParserS *p = (struct ParserS *)ud; | 242 | struct SParser *p = (struct SParser *)ud; |
| 243 | Proto *tf = p->bin ? luaU_undump(L, p->z) : luaY_parser(L, p->z); | 243 | Proto *tf = p->bin ? luaU_undump(L, p->z) : luaY_parser(L, p->z); |
| 244 | luaV_Lclosure(L, tf, 0); | 244 | luaV_Lclosure(L, tf, 0); |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | 247 | ||
| 248 | static int protectedparser (lua_State *L, ZIO *z, int bin) { | 248 | static int protectedparser (lua_State *L, ZIO *z, int bin) { |
| 249 | struct ParserS p; | 249 | struct SParser p; |
| 250 | mem_int old_blocks; | 250 | mem_int old_blocks; |
| 251 | int status; | 251 | int status; |
| 252 | LUA_LOCK; | 252 | LUA_LOCK(L); |
| 253 | p.z = z; p.bin = bin; | 253 | p.z = z; p.bin = bin; |
| 254 | luaC_checkGC(L); | 254 | luaC_checkGC(L); |
| 255 | old_blocks = G(L)->nblocks; | 255 | old_blocks = G(L)->nblocks; |
| @@ -261,7 +261,7 @@ static int protectedparser (lua_State *L, ZIO *z, int bin) { | |||
| 261 | } | 261 | } |
| 262 | else if (status == LUA_ERRRUN) /* an error occurred: correct error code */ | 262 | else if (status == LUA_ERRRUN) /* an error occurred: correct error code */ |
| 263 | status = LUA_ERRSYNTAX; | 263 | status = LUA_ERRSYNTAX; |
| 264 | LUA_UNLOCK; | 264 | LUA_UNLOCK(L); |
| 265 | return status; | 265 | return status; |
| 266 | } | 266 | } |
| 267 | 267 | ||
