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 | ||
