diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2004-06-08 11:31:00 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2004-06-08 11:31:00 -0300 |
| commit | 75057dfcedf9fb99660eed490c399ab3143e62c1 (patch) | |
| tree | 025379c1fdd51f6c556657f9e7b7535a5e4a19e9 | |
| parent | 345379b5ff7ce6f5a732a6954bfb5e83bce12036 (diff) | |
| download | lua-75057dfcedf9fb99660eed490c399ab3143e62c1.tar.gz lua-75057dfcedf9fb99660eed490c399ab3143e62c1.tar.bz2 lua-75057dfcedf9fb99660eed490c399ab3143e62c1.zip | |
| -rw-r--r-- | lapi.c | 9 |
1 files changed, 8 insertions, 1 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.10 2004/05/31 19:41:52 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.11 2004/06/04 15:30:53 roberto Exp roberto $ |
| 3 | ** Lua API | 3 | ** Lua API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -697,10 +697,15 @@ LUA_API int lua_setfenv (lua_State *L, int idx) { | |||
| 697 | { if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; } | 697 | { if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; } |
| 698 | 698 | ||
| 699 | 699 | ||
| 700 | #define checkresults(L,na,nr) \ | ||
| 701 | api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na))) | ||
| 702 | |||
| 703 | |||
| 700 | LUA_API void lua_call (lua_State *L, int nargs, int nresults) { | 704 | LUA_API void lua_call (lua_State *L, int nargs, int nresults) { |
| 701 | StkId func; | 705 | StkId func; |
| 702 | lua_lock(L); | 706 | lua_lock(L); |
| 703 | api_checknelems(L, nargs+1); | 707 | api_checknelems(L, nargs+1); |
| 708 | checkresults(L, nargs, nresults); | ||
| 704 | func = L->top - (nargs+1); | 709 | func = L->top - (nargs+1); |
| 705 | luaD_call(L, func, nresults); | 710 | luaD_call(L, func, nresults); |
| 706 | adjustresults(L, nresults); | 711 | adjustresults(L, nresults); |
| @@ -730,6 +735,8 @@ LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc) { | |||
| 730 | int status; | 735 | int status; |
| 731 | ptrdiff_t func; | 736 | ptrdiff_t func; |
| 732 | lua_lock(L); | 737 | lua_lock(L); |
| 738 | api_checknelems(L, nargs+1); | ||
| 739 | checkresults(L, nargs, nresults); | ||
| 733 | if (errfunc == 0) | 740 | if (errfunc == 0) |
| 734 | func = 0; | 741 | func = 0; |
| 735 | else { | 742 | else { |
