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