ruby-changes:2367
From: ko1@a...
Date: 9 Nov 2007 23:33:48 +0900
Subject: [ruby-changes:2367] nobu - Ruby:r13858 (trunk): * parse.y (parser_nextc): added single line read forward buffer.
nobu 2007-11-09 23:33:18 +0900 (Fri, 09 Nov 2007) New Revision: 13858 Modified files: trunk/ChangeLog trunk/parse.y Log: * parse.y (parser_nextc): added single line read forward buffer. * parse.y (parser_yylex): adjust line number for fluent interface. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=13858&r2=13857 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13858&r2=13857 Index: ChangeLog =================================================================== --- ChangeLog (revision 13857) +++ ChangeLog (revision 13858) @@ -1,3 +1,9 @@ +Fri Nov 9 23:33:16 2007 Nobuyoshi Nakada <nobu@r...> + + * parse.y (parser_nextc): added single line read forward buffer. + + * parse.y (parser_yylex): adjust line number for fluent interface. + Fri Nov 9 22:04:21 2007 Nobuyoshi Nakada <nobu@r...> * vm.h (FRAME_MAGIC_MASK_BITS): bits of FRAME_MAGIC_MASK. Index: parse.y =================================================================== --- parse.y (revision 13857) +++ parse.y (revision 13858) @@ -224,6 +224,7 @@ int parser_toksiz; VALUE parser_lex_input; VALUE parser_lex_lastline; + VALUE parser_lex_nextline; const char *parser_lex_pbeg; const char *parser_lex_p; const char *parser_lex_pend; @@ -304,6 +305,7 @@ #define toksiz (parser->parser_toksiz) #define lex_input (parser->parser_lex_input) #define lex_lastline (parser->parser_lex_lastline) +#define lex_nextline (parser->parser_lex_nextline) #define lex_pbeg (parser->parser_lex_pbeg) #define lex_p (parser->parser_lex_p) #define lex_pend (parser->parser_lex_pend) @@ -4852,15 +4854,19 @@ int c; if (lex_p == lex_pend) { - if (parser->eofp) - return -1; - if (lex_input) { - VALUE v = lex_getline(parser); + VALUE v = lex_nextline; + lex_nextline = 0; + if (!v) { + if (parser->eofp) + return -1; - if (NIL_P(v)) { - parser->eofp = Qtrue; - return -1; - } + if (!lex_input || NIL_P(v = lex_getline(parser))) { + parser->eofp = Qtrue; + lex_lastline = 0; + return -1; + } + } + { #ifdef RIPPER if (parser->tokp < lex_pend) { if (NIL_P(parser->delayed)) { @@ -4889,10 +4895,6 @@ #endif lex_lastline = v; } - else { - lex_lastline = 0; - return -1; - } } c = (unsigned char)*lex_p++; if (c == '\r' && lex_p < lex_pend && *lex_p == '\n') { @@ -5013,7 +5015,7 @@ tokadd(codepoint); } - } while(string_literal && (peek(' ') || peek('\t'))); + } while (string_literal && (peek(' ') || peek('\t'))); if (!peek('}')) { yyerror("unterminated Unicode escape"); @@ -6061,7 +6063,9 @@ } } default: - pushback(c); + lex_nextline = lex_lastline; + lex_p = lex_pend; + --ruby_sourceline; goto normal_newline; } } @@ -9088,6 +9092,7 @@ rb_gc_mark((VALUE)p->parser_lex_strterm); rb_gc_mark(p->parser_lex_input); rb_gc_mark(p->parser_lex_lastline); + rb_gc_mark(p->parser_lex_nextline); #ifndef RIPPER rb_gc_mark((VALUE)p->parser_eval_tree_begin) ; rb_gc_mark((VALUE)p->parser_eval_tree) ; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml