diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-02-20 13:52:50 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-02-20 13:52:50 -0300 |
| commit | ca6fe7449a74efde6f959605dbe77acf3e64ca0b (patch) | |
| tree | a6190e813ff712f7db750d4ecd3afd3ac9c0dbab /lstring.c | |
| parent | 1afd5a152dc8b3a304236dc4e07bca38ea5eb53a (diff) | |
| download | lua-ca6fe7449a74efde6f959605dbe77acf3e64ca0b.tar.gz lua-ca6fe7449a74efde6f959605dbe77acf3e64ca0b.tar.bz2 lua-ca6fe7449a74efde6f959605dbe77acf3e64ca0b.zip | |
userdata can have multiple user values
Diffstat (limited to 'lstring.c')
| -rw-r--r-- | lstring.c | 13 |
1 files changed, 8 insertions, 5 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstring.c,v 2.63 2018/01/28 15:13:26 roberto Exp roberto $ | 2 | ** $Id: lstring.c,v 2.64 2018/02/15 18:06:24 roberto Exp roberto $ |
| 3 | ** String table (keeps all strings handled by Lua) | 3 | ** String table (keeps all strings handled by Lua) |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -265,16 +265,19 @@ TString *luaS_new (lua_State *L, const char *str) { | |||
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | 267 | ||
| 268 | Udata *luaS_newudata (lua_State *L, size_t s) { | 268 | Udata *luaS_newudata (lua_State *L, size_t s, int nuvalue) { |
| 269 | Udata *u; | 269 | Udata *u; |
| 270 | int i; | ||
| 270 | GCObject *o; | 271 | GCObject *o; |
| 271 | if (s > MAX_SIZE - sizeof(Udata)) | 272 | if (s > MAX_SIZE - udatamemoffset(nuvalue)) |
| 272 | luaM_toobig(L); | 273 | luaM_toobig(L); |
| 273 | o = luaC_newobj(L, LUA_TUSERDATA, sizeludata(s)); | 274 | o = luaC_newobj(L, LUA_TUSERDATA, sizeudata(nuvalue, s)); |
| 274 | u = gco2u(o); | 275 | u = gco2u(o); |
| 275 | u->len = s; | 276 | u->len = s; |
| 277 | u->nuvalue = nuvalue; | ||
| 276 | u->metatable = NULL; | 278 | u->metatable = NULL; |
| 277 | setuservalue(L, u, luaO_nilobject); | 279 | for (i = 0; i < nuvalue; i++) |
| 280 | setnilvalue(&u->uv[i].uv); | ||
| 278 | return u; | 281 | return u; |
| 279 | } | 282 | } |
| 280 | 283 | ||
