diff options
Diffstat (limited to 'lib/tolua++/src/lib/tolua_push.c')
m--------- | lib/tolua++ | 0 | ||||
-rw-r--r-- | lib/tolua++/src/lib/tolua_push.c | 174 |
2 files changed, 0 insertions, 174 deletions
diff --git a/lib/tolua++ b/lib/tolua++ new file mode 160000 +Subproject 9181fc9ef73fa1c052f968d68dc60538f144a47 diff --git a/lib/tolua++/src/lib/tolua_push.c b/lib/tolua++/src/lib/tolua_push.c deleted file mode 100644 index 73a5f6ec0..000000000 --- a/lib/tolua++/src/lib/tolua_push.c +++ /dev/null @@ -1,174 +0,0 @@ -/* tolua: functions to push C values. -** Support code for Lua bindings. -** Written by Waldemar Celes -** TeCGraf/PUC-Rio -** Apr 2003 -** $Id: $ -*/ - -/* This code is free software; you can redistribute it and/or modify it. -** The software provided hereunder is on an "as is" basis, and -** the author has no obligation to provide maintenance, support, updates, -** enhancements, or modifications. -*/ - -#include "../../include/tolua++.h" -#include "../../../lua/src/lauxlib.h" - -#include <stdlib.h> -#include <assert.h> - -TOLUA_API void tolua_pushvalue (lua_State* L, int lo) -{ - lua_pushvalue(L,lo); -} - -TOLUA_API void tolua_pushboolean (lua_State* L, int value) -{ - lua_pushboolean(L,value); -} - -TOLUA_API void tolua_pushnumber (lua_State* L, lua_Number value) -{ - lua_pushnumber(L,value); -} - -TOLUA_API void tolua_pushstring (lua_State* L, const char* value) -{ - if (value == NULL) - lua_pushnil(L); - else - lua_pushstring(L,value); -} - -TOLUA_API void tolua_pushuserdata (lua_State* L, void* value) -{ - if (value == NULL) - lua_pushnil(L); - else - lua_pushlightuserdata(L,value); -} - -TOLUA_API void tolua_pushusertype (lua_State* L, void* value, const char* type) -{ - if (value == NULL) - lua_pushnil(L); - else - { - luaL_getmetatable(L, type); - assert(!lua_isnil(L, -1)); /* Failure here means that the usertype is unknown to ToLua. Check what type you're pushing. */ - lua_pushstring(L,"tolua_ubox"); - lua_rawget(L,-2); /* stack: mt ubox */ - if (lua_isnil(L, -1)) - { - lua_pop(L, 1); - lua_pushstring(L, "tolua_ubox"); - lua_rawget(L, LUA_REGISTRYINDEX); - }; - lua_pushlightuserdata(L,value); - lua_rawget(L,-2); /* stack: mt ubox ubox[u] */ - if (lua_isnil(L,-1)) - { - lua_pop(L,1); /* stack: mt ubox */ - lua_pushlightuserdata(L,value); - *(void**)lua_newuserdata(L,sizeof(void *)) = value; /* stack: mt ubox u newud */ - lua_pushvalue(L,-1); /* stack: mt ubox u newud newud */ - lua_insert(L,-4); /* stack: mt newud ubox u newud */ - lua_rawset(L,-3); /* stack: mt newud ubox */ - lua_pop(L,1); /* stack: mt newud */ - /*luaL_getmetatable(L,type);*/ - lua_pushvalue(L, -2); /* stack: mt newud mt */ - lua_setmetatable(L,-2); /* stack: mt newud */ - - #ifdef LUA_VERSION_NUM - lua_pushvalue(L, TOLUA_NOPEER); - lua_setfenv(L, -2); - #endif - } - else - { - /* check the need of updating the metatable to a more specialized class */ - lua_insert(L,-2); /* stack: mt ubox[u] ubox */ - lua_pop(L,1); /* stack: mt ubox[u] */ - lua_pushstring(L,"tolua_super"); - lua_rawget(L,LUA_REGISTRYINDEX); /* stack: mt ubox[u] super */ - lua_getmetatable(L,-2); /* stack: mt ubox[u] super mt */ - lua_rawget(L,-2); /* stack: mt ubox[u] super super[mt] */ - if (lua_istable(L,-1)) - { - lua_pushstring(L,type); /* stack: mt ubox[u] super super[mt] type */ - lua_rawget(L,-2); /* stack: mt ubox[u] super super[mt] flag */ - if (lua_toboolean(L,-1) == 1) /* if true */ - { - lua_pop(L,3); /* mt ubox[u]*/ - lua_remove(L, -2); - return; - } - } - /* type represents a more specilized type */ - /*luaL_getmetatable(L,type); // stack: mt ubox[u] super super[mt] flag mt */ - lua_pushvalue(L, -5); /* stack: mt ubox[u] super super[mt] flag mt */ - lua_setmetatable(L,-5); /* stack: mt ubox[u] super super[mt] flag */ - lua_pop(L,3); /* stack: mt ubox[u] */ - } - lua_remove(L, -2); /* stack: ubox[u]*/ - } -} - -TOLUA_API void tolua_pushusertype_and_takeownership (lua_State* L, void* value, const char* type) -{ - tolua_pushusertype(L,value,type); - tolua_register_gc(L,lua_gettop(L)); -} - -TOLUA_API void tolua_pushfieldvalue (lua_State* L, int lo, int index, int v) -{ - lua_pushnumber(L,index); - lua_pushvalue(L,v); - lua_settable(L,lo); -} - -TOLUA_API void tolua_pushfieldboolean (lua_State* L, int lo, int index, int v) -{ - lua_pushnumber(L,index); - lua_pushboolean(L,v); - lua_settable(L,lo); -} - - -TOLUA_API void tolua_pushfieldnumber (lua_State* L, int lo, int index, lua_Number v) -{ - lua_pushnumber(L,index); - tolua_pushnumber(L,v); - lua_settable(L,lo); -} - -TOLUA_API void tolua_pushfieldstring (lua_State* L, int lo, int index, const char* v) -{ - lua_pushnumber(L,index); - tolua_pushstring(L,v); - lua_settable(L,lo); -} - -TOLUA_API void tolua_pushfielduserdata (lua_State* L, int lo, int index, void* v) -{ - lua_pushnumber(L,index); - tolua_pushuserdata(L,v); - lua_settable(L,lo); -} - -TOLUA_API void tolua_pushfieldusertype (lua_State* L, int lo, int index, void* v, const char* type) -{ - lua_pushnumber(L,index); - tolua_pushusertype(L,v,type); - lua_settable(L,lo); -} - -TOLUA_API void tolua_pushfieldusertype_and_takeownership (lua_State* L, int lo, int index, void* v, const char* type) -{ - lua_pushnumber(L,index); - tolua_pushusertype(L,v,type); - tolua_register_gc(L,lua_gettop(L)); - lua_settable(L,lo); -} - |