diff options
Diffstat (limited to 'liolib.c')
| -rw-r--r-- | liolib.c | 16 |
1 files changed, 6 insertions, 10 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: liolib.c,v 2.46 2003/08/25 19:49:47 roberto Exp roberto $ | 2 | ** $Id: liolib.c,v 2.47 2003/10/07 20:13:41 roberto Exp roberto $ |
| 3 | ** Standard I/O (and system) library | 3 | ** Standard I/O (and system) library |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -236,8 +236,7 @@ static int io_readline (lua_State *L); | |||
| 236 | 236 | ||
| 237 | 237 | ||
| 238 | static void aux_lines (lua_State *L, int idx, int close) { | 238 | static void aux_lines (lua_State *L, int idx, int close) { |
| 239 | lua_pushliteral(L, FILEHANDLE); | 239 | lua_getfield(L, LUA_REGISTRYINDEX, FILEHANDLE); |
| 240 | lua_rawget(L, LUA_REGISTRYINDEX); | ||
| 241 | lua_pushvalue(L, idx); | 240 | lua_pushvalue(L, idx); |
| 242 | lua_pushboolean(L, close); /* close/not close file when finished */ | 241 | lua_pushboolean(L, close); /* close/not close file when finished */ |
| 243 | lua_pushcclosure(L, io_readline, 3); | 242 | lua_pushcclosure(L, io_readline, 3); |
| @@ -512,9 +511,8 @@ static void createmeta (lua_State *L) { | |||
| 512 | *newfile(L) = stdout; | 511 | *newfile(L) = stdout; |
| 513 | lua_rawseti(L, -2, IO_OUTPUT); | 512 | lua_rawseti(L, -2, IO_OUTPUT); |
| 514 | /* file methods */ | 513 | /* file methods */ |
| 515 | lua_pushliteral(L, "__index"); | 514 | lua_pushvalue(L, -1); /* push metatable */ |
| 516 | lua_pushvalue(L, -2); /* push metatable */ | 515 | lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ |
| 517 | lua_rawset(L, -3); /* metatable.__index = metatable */ | ||
| 518 | luaL_openlib(L, NULL, flib, 0); | 516 | luaL_openlib(L, NULL, flib, 0); |
| 519 | } | 517 | } |
| 520 | 518 | ||
| @@ -594,8 +592,7 @@ static void setboolfield (lua_State *L, const char *key, int value) { | |||
| 594 | 592 | ||
| 595 | static int getboolfield (lua_State *L, const char *key) { | 593 | static int getboolfield (lua_State *L, const char *key) { |
| 596 | int res; | 594 | int res; |
| 597 | lua_pushstring(L, key); | 595 | lua_getfield(L, -1, key); |
| 598 | lua_gettable(L, -2); | ||
| 599 | res = lua_toboolean(L, -1); | 596 | res = lua_toboolean(L, -1); |
| 600 | lua_pop(L, 1); | 597 | lua_pop(L, 1); |
| 601 | return res; | 598 | return res; |
| @@ -604,8 +601,7 @@ static int getboolfield (lua_State *L, const char *key) { | |||
| 604 | 601 | ||
| 605 | static int getfield (lua_State *L, const char *key, int d) { | 602 | static int getfield (lua_State *L, const char *key, int d) { |
| 606 | int res; | 603 | int res; |
| 607 | lua_pushstring(L, key); | 604 | lua_getfield(L, -1, key); |
| 608 | lua_gettable(L, -2); | ||
| 609 | if (lua_isnumber(L, -1)) | 605 | if (lua_isnumber(L, -1)) |
| 610 | res = (int)lua_tointeger(L, -1); | 606 | res = (int)lua_tointeger(L, -1); |
| 611 | else { | 607 | else { |
