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

ruby-changes:19844

From: nobu <ko1@a...>
Date: Wed, 1 Jun 2011 15:42:30 +0900 (JST)
Subject: [ruby-changes:19844] nobu:r31891 (trunk): * parse.y (peek_n): new macro to see next nth char.

nobu	2011-06-01 15:42:23 +0900 (Wed, 01 Jun 2011)

  New Revision: 31891

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31891

  Log:
    * parse.y (peek_n): new macro to see next nth char.

  Modified files:
    trunk/ChangeLog
    trunk/parse.y

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31890)
+++ ChangeLog	(revision 31891)
@@ -1,3 +1,7 @@
+Wed Jun  1 15:42:18 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (peek_n): new macro to see next nth char.
+
 Wed Jun  1 15:40:46 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* tool/rbinstall.rb (gem): fix for rubygems change.
Index: parse.y
===================================================================
--- parse.y	(revision 31890)
+++ parse.y	(revision 31891)
@@ -5364,7 +5364,8 @@
 }
 
 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
-#define peek(c) (lex_p < lex_pend && (c) == *lex_p)
+#define peek(c) peek_n((c), 0)
+#define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
 
 static inline int
 parser_nextc(struct parser_params *parser)
@@ -6531,6 +6532,8 @@
 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
+#define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG())
+#define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
 
 #ifndef RIPPER
 #define ambiguous_operator(op, syn) ( \
@@ -7742,7 +7745,7 @@
 	    else {
 		if (lex_state == EXPR_FNAME) {
 		    if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
-			(!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
+			(!peek('=') || (peek_n('>', 1)))) {
 			result = tIDENTIFIER;
 			tokadd(c);
 			tokfix();
@@ -7759,9 +7762,8 @@
 		}
 	    }
 
-	    if ((lex_state == EXPR_BEG && !cmd_state) ||
-		IS_ARG()) {
-		if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
+	    if (IS_LABEL_POSSIBLE()) {
+		if (IS_LABEL_SUFFIX(0)) {
 		    lex_state = EXPR_BEG;
 		    nextc();
 		    set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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