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