diff options
Diffstat (limited to 'llex.c')
-rw-r--r-- | llex.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -62,10 +62,10 @@ static l_noret lexerror (LexState *ls, const char *msg, int token); | |||
62 | static void save (LexState *ls, int c) { | 62 | static void save (LexState *ls, int c) { |
63 | Mbuffer *b = ls->buff; | 63 | Mbuffer *b = ls->buff; |
64 | if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { | 64 | if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { |
65 | size_t newsize; | 65 | size_t newsize = luaZ_sizebuffer(b); /* get old size */; |
66 | if (luaZ_sizebuffer(b) >= MAX_SIZE/2) | 66 | if (newsize >= (MAX_SIZE/3 * 2)) /* larger than MAX_SIZE/1.5 ? */ |
67 | lexerror(ls, "lexical element too long", 0); | 67 | lexerror(ls, "lexical element too long", 0); |
68 | newsize = luaZ_sizebuffer(b) * 2; | 68 | newsize += (newsize >> 1); /* new size is 1.5 times the old one */ |
69 | luaZ_resizebuffer(ls->L, b, newsize); | 69 | luaZ_resizebuffer(ls->L, b, newsize); |
70 | } | 70 | } |
71 | b->buffer[luaZ_bufflen(b)++] = cast_char(c); | 71 | b->buffer[luaZ_bufflen(b)++] = cast_char(c); |