diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2023-11-09 17:05:42 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2023-11-09 17:05:42 -0300 |
commit | 024f9064f1b43758eb36aba52547edc0312bf4ba (patch) | |
tree | 9d8609112058e885196a581f0736fbdd94f7f94d /lgc.c | |
parent | 7f4906f565ab9f8b1125107a3abae3d759f3ecf2 (diff) | |
download | lua-024f9064f1b43758eb36aba52547edc0312bf4ba.tar.gz lua-024f9064f1b43758eb36aba52547edc0312bf4ba.tar.bz2 lua-024f9064f1b43758eb36aba52547edc0312bf4ba.zip |
External strings
Strings can use external buffers to store their contents.
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -813,7 +813,9 @@ static void freeobj (lua_State *L, GCObject *o) { | |||
813 | } | 813 | } |
814 | case LUA_VLNGSTR: { | 814 | case LUA_VLNGSTR: { |
815 | TString *ts = gco2ts(o); | 815 | TString *ts = gco2ts(o); |
816 | luaM_freemem(L, ts, sizestrlng(ts->u.lnglen)); | 816 | if (ts->shrlen == LSTRMEM) /* must free external string? */ |
817 | (*ts->falloc)(ts->ud, ts->contents, ts->u.lnglen + 1, 0); | ||
818 | luaM_freemem(L, ts, luaS_sizelngstr(ts->u.lnglen, ts->shrlen)); | ||
817 | break; | 819 | break; |
818 | } | 820 | } |
819 | default: lua_assert(0); | 821 | default: lua_assert(0); |