Avoid unnecessary `nextc()` recursion.

parent d22b72a7
...@@ -3966,6 +3966,27 @@ static void pushback(parser_state *p, int c); ...@@ -3966,6 +3966,27 @@ static void pushback(parser_state *p, int c);
static mrb_bool peeks(parser_state *p, const char *s); static mrb_bool peeks(parser_state *p, const char *s);
static mrb_bool skips(parser_state *p, const char *s); static mrb_bool skips(parser_state *p, const char *s);
static inline int
nextc0(parser_state *p)
{
int c;
#ifndef MRB_DISABLE_STDIO
if (p->f) {
if (feof(p->f)) return -1;
c = fgetc(p->f);
if (c == EOF) return -1;
}
else
#endif
if (!p->s || p->s >= p->send) {
return -1;
}
else {
c = (unsigned char)*p->s++;
}
return c;
}
static inline int static inline int
nextc(parser_state *p) nextc(parser_state *p)
{ {
...@@ -3980,30 +4001,18 @@ nextc(parser_state *p) ...@@ -3980,30 +4001,18 @@ nextc(parser_state *p)
cons_free(tmp); cons_free(tmp);
} }
else { else {
#ifndef MRB_DISABLE_STDIO c = nextc0(p);
if (p->f) { if (c < 0) goto eof;
if (feof(p->f)) goto eof;
c = fgetc(p->f);
if (c == EOF) goto eof;
}
else
#endif
if (!p->s || p->s >= p->send) {
goto eof;
}
else {
c = (unsigned char)*p->s++;
}
} }
if (c >= 0) { if (c >= 0) {
p->column++; p->column++;
} }
if (c == '\r') { if (c == '\r') {
const int lf = nextc(p); const int lf = nextc0(p);
if (lf == '\n') { if (lf == '\n') {
return '\n'; return '\n';
} }
pushback(p, lf); if (lf > 0) pushback(p, lf);
} }
return c; return c;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment