[前][次][番号順一覧][スレッド一覧]

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

[前][次][番号順一覧][スレッド一覧]