summaryrefslogtreecommitdiff
path: root/lib/BLua.cc
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2009-12-01 00:15:47 +0100
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2009-12-01 00:19:21 +0100
commit3699ebd1770218368902469a32daf13ce6057408 (patch)
tree2cf8c645bf46b8ffd8b570fbb9ae0ef6feda6671 /lib/BLua.cc
parent137e20e9667287541991e4196097bd48fae3a2f0 (diff)
Trying to better cleanup the stack after the various opens.
Diffstat (limited to 'lib/BLua.cc')
-rw-r--r--lib/BLua.cc39
1 files changed, 30 insertions, 9 deletions
diff --git a/lib/BLua.cc b/lib/BLua.cc
index 0a763aa..ba5497a 100644
--- a/lib/BLua.cc
+++ b/lib/BLua.cc
@@ -545,6 +545,7 @@ Lua::Lua(const Lua & l) throw (GeneralException) {
}
void Lua::open_base() {
+ int n = gettop();
luaopen_base(L);
push("mkdir");
push(LuaStatics::mkdir);
@@ -552,7 +553,19 @@ void Lua::open_base() {
push("time");
push(LuaStatics::time);
settable();
- lua_pop(L, 1);
+ push("getenv");
+ push(LuaStatics::getenv);
+ settable();
+ push("setenv");
+ push(LuaStatics::setenv);
+ settable();
+ push("unsetenv");
+ push(LuaStatics::unsetenv);
+ settable();
+ push("sleep");
+ push(LuaStatics::sleep);
+ settable();
+ for (remove(n); n <= gettop(); remove(n));
push("mkdir");
push(LuaStatics::mkdir);
settable(LUA_GLOBALSINDEX);
@@ -574,31 +587,36 @@ void Lua::open_base() {
}
void Lua::open_table() {
+ int n = gettop();
luaopen_table(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::open_io(bool safe) {
+ int n = gettop();
luaopen_io(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::open_string() {
+ int n = gettop();
luaopen_string(L);
push("iconv");
push(LuaStatics::iconv);
settable();
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::open_math() {
+ int n = gettop();
luaopen_math(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::open_debug() {
+ int n = gettop();
luaopen_debug(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
extern "C" {
@@ -606,18 +624,21 @@ LUALIB_API int (luaopen_dir) (lua_State *L);
}
void Lua::open_dir() {
+ int n = gettop();
luaopen_dir(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::open_jit() {
+ int n = gettop();
luaopen_jit(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::open_bit() {
+ int n = gettop();
luaopen_bit(L);
- lua_pop(L, 1);
+ for (remove(n); n <= gettop(); remove(n));
}
void Lua::declarefunc(const String & name, lua_CFunction f, int i) {