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

ruby-changes:25977

From: nobu <ko1@a...>
Date: Fri, 30 Nov 2012 14:42:09 +0900 (JST)
Subject: [ruby-changes:25977] nobu:r38034 (trunk): parse.y: IS_lex_state_for

nobu	2012-11-30 14:41:57 +0900 (Fri, 30 Nov 2012)

  New Revision: 38034

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

  Log:
    parse.y: IS_lex_state_for
    
    * parse.y (IS_lex_state_for): new macro similar to IS_lex_state() but
      for arbitrary variables.

  Modified files:
    trunk/parse.y

Index: parse.y
===================================================================
--- parse.y	(revision 38033)
+++ parse.y	(revision 38034)
@@ -96,7 +96,8 @@
     EXPR_ARG_ANY  =  (EXPR_ARG | EXPR_CMDARG),
     EXPR_END_ANY  =  (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
 };
-#define IS_lex_state(ls)	(lex_state & ( ls ))
+#define IS_lex_state_for(x, ls)	((x) & (ls))
+#define IS_lex_state(ls)	IS_lex_state_for(lex_state, (ls))
 
 #if PARSER_DEBUG
 static const char *lex_state_name(enum lex_state_e state);
@@ -6752,7 +6753,7 @@
 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
 #endif
 #define warn_balanced(op, syn) ((void) \
-    (!(last_state & (EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG)) && \
+    (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
      space_seen && !ISSPACE(c) && \
      (ambiguous_operator(op, syn), 0)))
 
@@ -7812,7 +7813,7 @@
 	  case '`':		/* $`: string before last match */
 	  case '\'':		/* $': string after last match */
 	  case '+':		/* $+: string matches last paren. */
-	    if (last_state == EXPR_FNAME) {
+	    if (IS_lex_state_for(last_state, EXPR_FNAME)) {
 		tokadd('$');
 		tokadd(c);
 		goto gvar;
@@ -7829,7 +7830,7 @@
 		c = nextc();
 	    } while (c != -1 && ISDIGIT(c));
 	    pushback(c);
-	    if (last_state == EXPR_FNAME) goto gvar;
+	    if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
 	    tokfix();
 	    set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
 	    return tNTH_REF;
@@ -8018,7 +8019,8 @@
             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
 
             set_yylval_name(ident);
-            if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
+            if (!IS_lex_state_for(last_state, EXPR_DOT) &&
+		is_local_id(ident) && lvar_defined(ident)) {
                 lex_state = EXPR_END;
             }
         }

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

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