diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-06 15:00:19 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-06 15:00:19 -0300 |
commit | d5b83ead90fba27faa344c72406d85987d2460a4 (patch) | |
tree | 96d73c1b872b6b01a28c0586b871d37185034ba9 /lapi.c | |
parent | da673d31aaa05e8dff60c0b601b9f15c4f9182a8 (diff) | |
download | lua-d5b83ead90fba27faa344c72406d85987d2460a4.tar.gz lua-d5b83ead90fba27faa344c72406d85987d2460a4.tar.bz2 lua-d5b83ead90fba27faa344c72406d85987d2460a4.zip |
new implementation for userdatas, without `keys'
Diffstat (limited to 'lapi.c')
-rw-r--r-- | lapi.c | 45 |
1 files changed, 25 insertions, 20 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lapi.c,v 1.141 2001/04/23 16:35:45 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.142 2001/06/05 18:17:01 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 | */ |
@@ -284,8 +284,7 @@ LUA_API void *lua_touserdata (lua_State *L, int index) { | |||
284 | void *p; | 284 | void *p; |
285 | lua_lock(L); | 285 | lua_lock(L); |
286 | o = luaA_indexAcceptable(L, index); | 286 | o = luaA_indexAcceptable(L, index); |
287 | p = (o == NULL || ttype(o) != LUA_TUSERDATA) ? NULL : | 287 | p = (o == NULL || ttype(o) != LUA_TUSERDATA) ? NULL : uvalue(o)->value; |
288 | tsvalue(o)->u.d.value; | ||
289 | lua_unlock(L); | 288 | lua_unlock(L); |
290 | return p; | 289 | return p; |
291 | } | 290 | } |
@@ -360,16 +359,6 @@ LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { | |||
360 | } | 359 | } |
361 | 360 | ||
362 | 361 | ||
363 | LUA_API int lua_pushuserdata (lua_State *L, void *u) { | ||
364 | int isnew; | ||
365 | lua_lock(L); | ||
366 | isnew = luaS_createudata(L, u, L->top); | ||
367 | api_incr_top(L); | ||
368 | lua_unlock(L); | ||
369 | return isnew; | ||
370 | } | ||
371 | |||
372 | |||
373 | 362 | ||
374 | /* | 363 | /* |
375 | ** get functions (Lua -> stack) | 364 | ** get functions (Lua -> stack) |
@@ -673,7 +662,7 @@ LUA_API void lua_settag (lua_State *L, int tag) { | |||
673 | hvalue(L->top-1)->htag = tag; | 662 | hvalue(L->top-1)->htag = tag; |
674 | break; | 663 | break; |
675 | case LUA_TUSERDATA: | 664 | case LUA_TUSERDATA: |
676 | tsvalue(L->top-1)->u.d.tag = tag; | 665 | uvalue(L->top-1)->tag = tag; |
677 | break; | 666 | break; |
678 | default: | 667 | default: |
679 | luaO_verror(L, l_s("cannot change the tag of a %.20s"), | 668 | luaO_verror(L, l_s("cannot change the tag of a %.20s"), |
@@ -771,20 +760,34 @@ LUA_API void lua_concat (lua_State *L, int n) { | |||
771 | } | 760 | } |
772 | 761 | ||
773 | 762 | ||
763 | static Udata *pushnewudata (lua_State *L, size_t size) { | ||
764 | Udata *u = luaS_newudata(L, size); | ||
765 | setuvalue(L->top, u); | ||
766 | api_incr_top(L); | ||
767 | return uvalue(L->top-1); | ||
768 | } | ||
769 | |||
770 | |||
774 | LUA_API void *lua_newuserdata (lua_State *L, size_t size) { | 771 | LUA_API void *lua_newuserdata (lua_State *L, size_t size) { |
775 | TString *ts; | 772 | Udata *u; |
776 | void *p; | 773 | void *p; |
777 | lua_lock(L); | 774 | lua_lock(L); |
778 | if (size == 0) size = 1; | 775 | u = pushnewudata(L, size); |
779 | ts = luaS_newudata(L, size, NULL); | 776 | p = u->value; |
780 | setuvalue(L->top, ts); | ||
781 | api_incr_top(L); | ||
782 | p = ts->u.d.value; | ||
783 | lua_unlock(L); | 777 | lua_unlock(L); |
784 | return p; | 778 | return p; |
785 | } | 779 | } |
786 | 780 | ||
787 | 781 | ||
782 | LUA_API void lua_newuserdatabox (lua_State *L, void *p) { | ||
783 | Udata *u; | ||
784 | lua_lock(L); | ||
785 | u = pushnewudata(L, 0); | ||
786 | u->value = p; | ||
787 | lua_unlock(L); | ||
788 | } | ||
789 | |||
790 | |||
788 | LUA_API int lua_getweakmode (lua_State *L, int index) { | 791 | LUA_API int lua_getweakmode (lua_State *L, int index) { |
789 | StkId t; | 792 | StkId t; |
790 | int mode; | 793 | int mode; |
@@ -806,6 +809,7 @@ LUA_API void lua_setweakmode (lua_State *L, int mode) { | |||
806 | 809 | ||
807 | 810 | ||
808 | 811 | ||
812 | #if 0 | ||
809 | /* | 813 | /* |
810 | ** deprecated function | 814 | ** deprecated function |
811 | */ | 815 | */ |
@@ -819,3 +823,4 @@ LUA_API void lua_pushusertag (lua_State *L, void *u, int tag) { | |||
819 | } | 823 | } |
820 | } | 824 | } |
821 | } | 825 | } |
826 | #endif | ||