diff options
Diffstat (limited to 'lvm.c')
| -rw-r--r-- | lvm.c | 10 |
1 files changed, 5 insertions, 5 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 2.106 2010/03/12 19:14:06 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 2.107 2010/03/26 20:58:11 roberto Exp roberto $ |
| 3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -74,6 +74,10 @@ static void traceexec (lua_State *L) { | |||
| 74 | luaD_hook(L, LUA_HOOKLINE, newline); | 74 | luaD_hook(L, LUA_HOOKLINE, newline); |
| 75 | } | 75 | } |
| 76 | L->oldpc = ci->u.l.savedpc; | 76 | L->oldpc = ci->u.l.savedpc; |
| 77 | if (L->status == LUA_YIELD) { /* did hook yield? */ | ||
| 78 | ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ | ||
| 79 | luaD_throw(L, LUA_YIELD); | ||
| 80 | } | ||
| 77 | } | 81 | } |
| 78 | 82 | ||
| 79 | 83 | ||
| @@ -460,10 +464,6 @@ void luaV_execute (lua_State *L) { | |||
| 460 | if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && | 464 | if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && |
| 461 | (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { | 465 | (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { |
| 462 | traceexec(L); | 466 | traceexec(L); |
| 463 | if (L->status == LUA_YIELD) { /* did hook yield? */ | ||
| 464 | ci->u.l.savedpc--; /* undo increment */ | ||
| 465 | luaD_throw(L, LUA_YIELD); | ||
| 466 | } | ||
| 467 | base = ci->u.l.base; | 467 | base = ci->u.l.base; |
| 468 | } | 468 | } |
| 469 | /* warning!! several calls may realloc the stack and invalidate `ra' */ | 469 | /* warning!! several calls may realloc the stack and invalidate `ra' */ |
