From 3a4c8e2d9fac288bfe6948c15fc3dc14449b17cd Mon Sep 17 00:00:00 2001 From: fleuria Date: Wed, 30 Oct 2013 00:03:04 +0800 Subject: fix #1550 emit a "\n" as the first token for parser instead of taking the first character from the next file for lexer, to prevent mruby "concatenate" two keywords between files it should be regarded as a work around, for it can not resolve this case: $ cat a.rb " $ cat b.rb b" $ bin/mrbc -o- -v a.rb b.rb mruby - Embeddable Ruby Copyright (c) 2010-2013 mruby developers NODE_SCOPE: NODE_BEGIN: NODE_STR " b " len 4 irep 0 nregs=2 nlocals=1 pools=1 syms=0 000 OP_STRING R1 "\n\nb " 001 OP_STOP thanks @bovi 's idea --- src/parse.y | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/parse.y b/src/parse.y index 7cac9b0c5..3ffc683f9 100644 --- a/src/parse.y +++ b/src/parse.y @@ -37,6 +37,7 @@ static void yyerror(parser_state *p, const char *s); static void yywarn(parser_state *p, const char *s); static void yywarning(parser_state *p, const char *s); static void backref_error(parser_state *p, node *n); +static void tokadd(parser_state *p, int c); #ifndef isascii #define isascii(c) (((c) & ~0x7f) == 0) @@ -3338,6 +3339,7 @@ nextc(parser_state *p) if (cxt->partial_hook(p) < 0) return -1; p->cxt = NULL; + tokadd(p, '\n'); c = nextc(p); p->cxt = cxt; return c; -- cgit v1.2.3