diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2005-02-18 10:40:02 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2005-02-18 10:40:02 -0200 |
| commit | 7d45a5f48ff32a4e09a1734de23823943d6a6b28 (patch) | |
| tree | de7bef1faf37d9b639928e5269e89d7112b5b6fa /lbaselib.c | |
| parent | 73d764024451c24bc43b8e5102fe90974a86b7f4 (diff) | |
| download | lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.tar.gz lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.tar.bz2 lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.zip | |
C functions and userdata also have environments
Diffstat (limited to 'lbaselib.c')
| -rw-r--r-- | lbaselib.c | 11 |
1 files changed, 7 insertions, 4 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lbaselib.c,v 1.165 2005/01/14 14:19:42 roberto Exp roberto $ | 2 | ** $Id: lbaselib.c,v 1.166 2005/02/14 13:19:44 roberto Exp roberto $ |
| 3 | ** Basic library | 3 | ** Basic library |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -131,7 +131,10 @@ static void getfunc (lua_State *L) { | |||
| 131 | 131 | ||
| 132 | static int luaB_getfenv (lua_State *L) { | 132 | static int luaB_getfenv (lua_State *L) { |
| 133 | getfunc(L); | 133 | getfunc(L); |
| 134 | lua_getfenv(L, -1); | 134 | if (lua_iscfunction(L, -1)) /* is a C function? */ |
| 135 | lua_pushvalue(L, LUA_GLOBALSINDEX); /* return the global env. */ | ||
| 136 | else | ||
| 137 | lua_getfenv(L, -1); | ||
| 135 | return 1; | 138 | return 1; |
| 136 | } | 139 | } |
| 137 | 140 | ||
| @@ -144,8 +147,8 @@ static int luaB_setfenv (lua_State *L) { | |||
| 144 | lua_replace(L, LUA_GLOBALSINDEX); | 147 | lua_replace(L, LUA_GLOBALSINDEX); |
| 145 | return 0; | 148 | return 0; |
| 146 | } | 149 | } |
| 147 | else if (lua_setfenv(L, -2) == 0) | 150 | else if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0) |
| 148 | luaL_error(L, "`setfenv' cannot change environment of given function"); | 151 | luaL_error(L, "`setfenv' cannot change environment of given object"); |
| 149 | return 1; | 152 | return 1; |
| 150 | } | 153 | } |
| 151 | 154 | ||
