diff options
Diffstat (limited to 'src/lj_buf.h')
-rw-r--r-- | src/lj_buf.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/lj_buf.h b/src/lj_buf.h index 02f0ac61..b97d55ef 100644 --- a/src/lj_buf.h +++ b/src/lj_buf.h | |||
@@ -27,6 +27,7 @@ typedef struct SBufExt { | |||
27 | MRef bsb; /* Borrowed string buffer. */ | 27 | MRef bsb; /* Borrowed string buffer. */ |
28 | }; | 28 | }; |
29 | char *r; /* Read pointer. */ | 29 | char *r; /* Read pointer. */ |
30 | GCRef dict; /* Serialization string dictionary table. */ | ||
30 | int depth; /* Remaining recursion depth. */ | 31 | int depth; /* Remaining recursion depth. */ |
31 | } SBufExt; | 32 | } SBufExt; |
32 | 33 | ||
@@ -114,19 +115,17 @@ static LJ_AINLINE void lj_bufx_init(lua_State *L, SBufExt *sbx) | |||
114 | setsbufXL(sbx, L, SBUF_FLAG_EXT); | 115 | setsbufXL(sbx, L, SBUF_FLAG_EXT); |
115 | } | 116 | } |
116 | 117 | ||
117 | static LJ_AINLINE void lj_bufx_init_borrow(lua_State *L, SBufExt *sbx, SBuf *sb) | 118 | static LJ_AINLINE void lj_bufx_set_borrow(lua_State *L, SBufExt *sbx, SBuf *sb) |
118 | { | 119 | { |
119 | memset(sbx, 0, sizeof(SBufExt)); | ||
120 | setsbufXL(sbx, L, SBUF_FLAG_EXT | SBUF_FLAG_BORROW); | 120 | setsbufXL(sbx, L, SBUF_FLAG_EXT | SBUF_FLAG_BORROW); |
121 | setmref(sbx->bsb, sb); | 121 | setmref(sbx->bsb, sb); |
122 | sbx->r = sbx->w = sbx->b = sb->b; | 122 | sbx->r = sbx->w = sbx->b = sb->b; |
123 | sbx->e = sb->e; | 123 | sbx->e = sb->e; |
124 | } | 124 | } |
125 | 125 | ||
126 | static LJ_AINLINE void lj_bufx_init_cow(lua_State *L, SBufExt *sbx, | 126 | static LJ_AINLINE void lj_bufx_set_cow(lua_State *L, SBufExt *sbx, |
127 | const char *p, MSize len) | 127 | const char *p, MSize len) |
128 | { | 128 | { |
129 | memset(sbx, 0, sizeof(SBufExt)); | ||
130 | setsbufXL(sbx, L, SBUF_FLAG_EXT | SBUF_FLAG_COW); | 129 | setsbufXL(sbx, L, SBUF_FLAG_EXT | SBUF_FLAG_COW); |
131 | sbx->r = sbx->b = (char *)p; | 130 | sbx->r = sbx->b = (char *)p; |
132 | sbx->w = sbx->e = (char *)p + len; | 131 | sbx->w = sbx->e = (char *)p + len; |
@@ -142,9 +141,12 @@ static LJ_AINLINE void lj_bufx_reset(SBufExt *sbx) | |||
142 | sbx->r = sbx->w = sbx->b; | 141 | sbx->r = sbx->w = sbx->b; |
143 | } | 142 | } |
144 | 143 | ||
145 | static LJ_AINLINE void lj_bufx_free(global_State *g, SBufExt *sbx) | 144 | static LJ_AINLINE void lj_bufx_free(lua_State *L, SBufExt *sbx) |
146 | { | 145 | { |
147 | if (!sbufiscow(sbx)) lj_mem_free(g, sbx->b, sbufsz(sbx)); | 146 | if (!sbufiscow(sbx)) lj_mem_free(G(L), sbx->b, sbufsz(sbx)); |
147 | setsbufXL(sbx, L, SBUF_FLAG_EXT); | ||
148 | setgcrefnull(sbx->cowref); | ||
149 | sbx->r = sbx->w = sbx->b = sbx->e = NULL; | ||
148 | } | 150 | } |
149 | 151 | ||
150 | /* Low-level buffer put operations */ | 152 | /* Low-level buffer put operations */ |