aboutsummaryrefslogtreecommitdiff
path: root/lbaselib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lbaselib.c')
-rw-r--r--lbaselib.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/lbaselib.c b/lbaselib.c
index b05a1b15..9658a1c6 100644
--- a/lbaselib.c
+++ b/lbaselib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbaselib.c,v 1.92 2002/08/05 14:46:02 roberto Exp roberto $ 2** $Id: lbaselib.c,v 1.93 2002/08/06 15:32:22 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*/
@@ -81,6 +81,21 @@ static int luaB_error (lua_State *L) {
81} 81}
82 82
83 83
84static int luaB_getmode (lua_State *L) {
85 luaL_check_type(L, 1, LUA_TTABLE);
86 lua_pushstring(L, lua_getmode(L, 1));
87 return 1;
88}
89
90
91static int luaB_setmode (lua_State *L) {
92 luaL_check_type(L, 1, LUA_TTABLE);
93 lua_setmode(L, 1, luaL_check_string(L, 2));
94 lua_settop(L, 1);
95 return 1;
96}
97
98
84static int luaB_getmetatable (lua_State *L) { 99static int luaB_getmetatable (lua_State *L) {
85 luaL_check_any(L, 1); 100 luaL_check_any(L, 1);
86 if (!lua_getmetatable(L, 1)) { 101 if (!lua_getmetatable(L, 1)) {
@@ -460,6 +475,8 @@ static const luaL_reg base_funcs[] = {
460 {"setmetatable", luaB_setmetatable}, 475 {"setmetatable", luaB_setmetatable},
461 {"getglobals", luaB_getglobals}, 476 {"getglobals", luaB_getglobals},
462 {"setglobals", luaB_setglobals}, 477 {"setglobals", luaB_setglobals},
478 {"getmode", luaB_getmode},
479 {"setmode", luaB_setmode},
463 {"next", luaB_next}, 480 {"next", luaB_next},
464 {"ipairs", luaB_ipairs}, 481 {"ipairs", luaB_ipairs},
465 {"pairs", luaB_pairs}, 482 {"pairs", luaB_pairs},
@@ -572,11 +589,7 @@ static void base_open (lua_State *L) {
572 /* `newproxy' needs a weaktable as upvalue */ 589 /* `newproxy' needs a weaktable as upvalue */
573 lua_pushliteral(L, "newproxy"); 590 lua_pushliteral(L, "newproxy");
574 lua_newtable(L); /* new table `w' */ 591 lua_newtable(L); /* new table `w' */
575 lua_pushvalue(L, -1); /* `w' will be its own metatable */ 592 lua_setmode(L, -1, "k");
576 lua_setmetatable(L, -2);
577 lua_pushliteral(L, "__mode");
578 lua_pushliteral(L, "k");
579 lua_rawset(L, -3); /* metatable(w).__mode = "k" */
580 lua_pushcclosure(L, luaB_newproxy, 1); 593 lua_pushcclosure(L, luaB_newproxy, 1);
581 lua_rawset(L, -3); /* set global `newproxy' */ 594 lua_rawset(L, -3); /* set global `newproxy' */
582 lua_rawset(L, -1); /* set global _G */ 595 lua_rawset(L, -1); /* set global _G */