aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/lapi.c b/lapi.c
index ae96ef86..9edc043f 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 1.181 2002/03/27 12:49:53 roberto Exp roberto $ 2** $Id: lapi.c,v 1.182 2002/04/02 20:43:18 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -278,7 +278,12 @@ LUA_API lua_CFunction lua_tocfunction (lua_State *L, int index) {
278 278
279LUA_API void *lua_touserdata (lua_State *L, int index) { 279LUA_API void *lua_touserdata (lua_State *L, int index) {
280 StkId o = luaA_indexAcceptable(L, index); 280 StkId o = luaA_indexAcceptable(L, index);
281 return (o == NULL || ttype(o) != LUA_TUSERDATA) ? NULL : uvalue(o)->uv.value; 281 if (o == NULL) return NULL;
282 switch (ttype(o)) {
283 case LUA_TUSERDATA: return (uvalue(o) + 1);
284 case LUA_TUDATAVAL: return pvalue(o);
285 default: return NULL;
286 }
282} 287}
283 288
284 289
@@ -356,6 +361,14 @@ LUA_API void lua_pushboolean (lua_State *L, int b) {
356} 361}
357 362
358 363
364LUA_API void lua_pushudataval (lua_State *L, void *p) {
365 lua_lock(L);
366 setpvalue(L->top, p);
367 api_incr_top(L);
368 lua_unlock(L);
369}
370
371
359 372
360/* 373/*
361** get functions (Lua -> stack) 374** get functions (Lua -> stack)
@@ -472,7 +485,7 @@ LUA_API void lua_setmetatable (lua_State *L, int objindex) {
472 StkId obj, mt; 485 StkId obj, mt;
473 lua_lock(L); 486 lua_lock(L);
474 api_checknelems(L, 1); 487 api_checknelems(L, 1);
475 obj = luaA_indexAcceptable(L, objindex); 488 obj = luaA_index(L, objindex);
476 mt = --L->top; 489 mt = --L->top;
477 if (ttype(mt) == LUA_TNIL) 490 if (ttype(mt) == LUA_TNIL)
478 mt = defaultmeta(L); 491 mt = defaultmeta(L);
@@ -649,31 +662,14 @@ LUA_API void lua_concat (lua_State *L, int n) {
649} 662}
650 663
651 664
652static Udata *pushnewudata (lua_State *L, size_t size) {
653 Udata *u = luaS_newudata(L, size);
654 setuvalue(L->top, u);
655 api_incr_top(L);
656 return uvalue(L->top-1);
657}
658
659
660LUA_API void *lua_newuserdata (lua_State *L, size_t size) { 665LUA_API void *lua_newuserdata (lua_State *L, size_t size) {
661 Udata *u; 666 Udata *u;
662 void *p;
663 lua_lock(L); 667 lua_lock(L);
664 u = pushnewudata(L, size); 668 u = luaS_newudata(L, size);
665 p = u->uv.value; 669 setuvalue(L->top, u);
666 lua_unlock(L); 670 api_incr_top(L);
667 return p;
668}
669
670
671LUA_API void lua_newuserdatabox (lua_State *L, void *p) {
672 Udata *u;
673 lua_lock(L);
674 u = pushnewudata(L, 0);
675 u->uv.value = p;
676 lua_unlock(L); 671 lua_unlock(L);
672 return u + 1;
677} 673}
678 674
679 675