aboutsummaryrefslogtreecommitdiff
path: root/src/lj_lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_lex.c')
-rw-r--r--src/lj_lex.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/lj_lex.c b/src/lj_lex.c
index 2c5128e7..5a8f1003 100644
--- a/src/lj_lex.c
+++ b/src/lj_lex.c
@@ -45,17 +45,17 @@ TKDEF(TKSTR1, TKSTR2)
45static LJ_NOINLINE LexChar lex_more(LexState *ls) 45static LJ_NOINLINE LexChar lex_more(LexState *ls)
46{ 46{
47 size_t sz; 47 size_t sz;
48 const char *buf = ls->rfunc(ls->L, ls->rdata, &sz); 48 const char *p = ls->rfunc(ls->L, ls->rdata, &sz);
49 if (buf == NULL || sz == 0) return LEX_EOF; 49 if (p == NULL || sz == 0) return LEX_EOF;
50 ls->n = (MSize)sz - 1; 50 ls->pe = p + sz;
51 ls->p = buf; 51 ls->p = p + 1;
52 return (LexChar)(uint8_t)*ls->p++; 52 return (LexChar)(uint8_t)p[0];
53} 53}
54 54
55/* Get next character. */ 55/* Get next character. */
56static LJ_AINLINE LexChar lex_next(LexState *ls) 56static LJ_AINLINE LexChar lex_next(LexState *ls)
57{ 57{
58 return (ls->c = ls->n ? (ls->n--,(LexChar)(uint8_t)*ls->p++) : lex_more(ls)); 58 return (ls->c = ls->p < ls->pe ? (LexChar)(uint8_t)*ls->p++ : lex_more(ls));
59} 59}
60 60
61/* Save character. */ 61/* Save character. */
@@ -368,8 +368,7 @@ int lj_lex_setup(lua_State *L, LexState *ls)
368 int header = 0; 368 int header = 0;
369 ls->L = L; 369 ls->L = L;
370 ls->fs = NULL; 370 ls->fs = NULL;
371 ls->n = 0; 371 ls->pe = ls->p = NULL;
372 ls->p = NULL;
373 ls->vstack = NULL; 372 ls->vstack = NULL;
374 ls->sizevstack = 0; 373 ls->sizevstack = 0;
375 ls->vtop = 0; 374 ls->vtop = 0;
@@ -379,9 +378,8 @@ int lj_lex_setup(lua_State *L, LexState *ls)
379 ls->linenumber = 1; 378 ls->linenumber = 1;
380 ls->lastline = 1; 379 ls->lastline = 1;
381 lex_next(ls); /* Read-ahead first char. */ 380 lex_next(ls); /* Read-ahead first char. */
382 if (ls->c == 0xef && ls->n >= 2 && (uint8_t)ls->p[0] == 0xbb && 381 if (ls->c == 0xef && ls->p + 2 <= ls->pe && (uint8_t)ls->p[0] == 0xbb &&
383 (uint8_t)ls->p[1] == 0xbf) { /* Skip UTF-8 BOM (if buffered). */ 382 (uint8_t)ls->p[1] == 0xbf) { /* Skip UTF-8 BOM (if buffered). */
384 ls->n -= 2;
385 ls->p += 2; 383 ls->p += 2;
386 lex_next(ls); 384 lex_next(ls);
387 header = 1; 385 header = 1;