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