diff options
Diffstat (limited to 'src/lj_buf.h')
-rw-r--r-- | src/lj_buf.h | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/lj_buf.h b/src/lj_buf.h index 5f78c4a9..7a123e83 100644 --- a/src/lj_buf.h +++ b/src/lj_buf.h | |||
@@ -17,11 +17,13 @@ | |||
17 | #define sbufL(sb) (mref((sb)->L, lua_State)) | 17 | #define sbufL(sb) (mref((sb)->L, lua_State)) |
18 | #define sbufsz(sb) ((MSize)(sbufE((sb)) - sbufB((sb)))) | 18 | #define sbufsz(sb) ((MSize)(sbufE((sb)) - sbufB((sb)))) |
19 | #define sbuflen(sb) ((MSize)(sbufP((sb)) - sbufB((sb)))) | 19 | #define sbuflen(sb) ((MSize)(sbufP((sb)) - sbufB((sb)))) |
20 | #define sbufleft(sb) ((MSize)(sbufE((sb)) - sbufP((sb)))) | ||
20 | #define setsbufP(sb, q) (setmref((sb)->p, (q))) | 21 | #define setsbufP(sb, q) (setmref((sb)->p, (q))) |
21 | #define setsbufL(sb, l) (setmref((sb)->L, (l))) | 22 | #define setsbufL(sb, l) (setmref((sb)->L, (l))) |
22 | 23 | ||
23 | /* Buffer management */ | 24 | /* Buffer management */ |
24 | LJ_FUNC void LJ_FASTCALL lj_buf_grow(SBuf *sb, char *en); | 25 | LJ_FUNC char *LJ_FASTCALL lj_buf_need2(SBuf *sb, MSize sz); |
26 | LJ_FUNC char *LJ_FASTCALL lj_buf_more2(SBuf *sb, MSize sz); | ||
25 | LJ_FUNC void LJ_FASTCALL lj_buf_shrink(lua_State *L, SBuf *sb); | 27 | LJ_FUNC void LJ_FASTCALL lj_buf_shrink(lua_State *L, SBuf *sb); |
26 | LJ_FUNC char * LJ_FASTCALL lj_buf_tmp(lua_State *L, MSize sz); | 28 | LJ_FUNC char * LJ_FASTCALL lj_buf_tmp(lua_State *L, MSize sz); |
27 | 29 | ||
@@ -51,17 +53,15 @@ static LJ_AINLINE void lj_buf_free(global_State *g, SBuf *sb) | |||
51 | 53 | ||
52 | static LJ_AINLINE char *lj_buf_need(SBuf *sb, MSize sz) | 54 | static LJ_AINLINE char *lj_buf_need(SBuf *sb, MSize sz) |
53 | { | 55 | { |
54 | char *en = sbufB(sb) + sz; | 56 | if (LJ_UNLIKELY(sz > sbufsz(sb))) |
55 | if (LJ_UNLIKELY(en > sbufE(sb))) | 57 | return lj_buf_need2(sb, sz); |
56 | lj_buf_grow(sb, en); | ||
57 | return sbufB(sb); | 58 | return sbufB(sb); |
58 | } | 59 | } |
59 | 60 | ||
60 | static LJ_AINLINE char *lj_buf_more(SBuf *sb, MSize sz) | 61 | static LJ_AINLINE char *lj_buf_more(SBuf *sb, MSize sz) |
61 | { | 62 | { |
62 | char *en = sbufP(sb) + sz; | 63 | if (LJ_UNLIKELY(sz > sbufleft(sb))) |
63 | if (LJ_UNLIKELY(en > sbufE(sb))) | 64 | return lj_buf_more2(sb, sz); |
64 | lj_buf_grow(sb, en); | ||
65 | return sbufP(sb); | 65 | return sbufP(sb); |
66 | } | 66 | } |
67 | 67 | ||