diff options
Diffstat (limited to '')
-rw-r--r-- | lfunc.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -264,6 +264,21 @@ Proto *luaF_newproto (lua_State *L) { | |||
264 | } | 264 | } |
265 | 265 | ||
266 | 266 | ||
267 | size_t luaF_protosize (Proto *p) { | ||
268 | size_t sz = sizeof(Proto) | ||
269 | + cast_uint(p->sizep) * sizeof(Proto*) | ||
270 | + cast_uint(p->sizek) * sizeof(TValue) | ||
271 | + cast_uint(p->sizelocvars) * sizeof(LocVar) | ||
272 | + cast_uint(p->sizeupvalues) * sizeof(Upvaldesc); | ||
273 | if (!(p->flag & PF_FIXED)) { | ||
274 | sz += cast_uint(p->sizecode) * sizeof(Instruction) | ||
275 | + cast_uint(p->sizelineinfo) * sizeof(lu_byte) | ||
276 | + cast_uint(p->sizeabslineinfo) * sizeof(AbsLineInfo); | ||
277 | } | ||
278 | return sz; | ||
279 | } | ||
280 | |||
281 | |||
267 | void luaF_freeproto (lua_State *L, Proto *f) { | 282 | void luaF_freeproto (lua_State *L, Proto *f) { |
268 | if (!(f->flag & PF_FIXED)) { | 283 | if (!(f->flag & PF_FIXED)) { |
269 | luaM_freearray(L, f->code, cast_sizet(f->sizecode)); | 284 | luaM_freearray(L, f->code, cast_sizet(f->sizecode)); |