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

ruby-changes:45525

From: nobu <ko1@a...>
Date: Sat, 11 Feb 2017 11:14:18 +0900 (JST)
Subject: [ruby-changes:45525] nobu:r57598 (trunk): parse.y: TOKEN2ID

nobu	2017-02-11 11:14:06 +0900 (Sat, 11 Feb 2017)

  New Revision: 57598

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57598

  Log:
    parse.y: TOKEN2ID
    
    * parse.y (TOKEN2ID): add macro which maps static tokens to IDs.
    
    * template/id.h.tmpl (TOKEN2*ID, DEFINE_*ID_FROM_TOKEN): separate
      into macros, token to ID mapping and enum definitions.

  Modified files:
    trunk/parse.y
    trunk/template/id.h.tmpl
Index: parse.y
===================================================================
--- parse.y	(revision 57597)
+++ parse.y	(revision 57598)
@@ -653,6 +653,15 @@ static int lvar_defined_gen(struct parse https://github.com/ruby/ruby/blob/trunk/parse.y#L653
 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
 #define nd_nest u3.cnt
 
+#define TOKEN2ID(tok) ( \
+    tTOKEN_LOCAL_BEGIN<(tok)&&(tok)<tTOKEN_LOCAL_END ? TOKEN2LOCALID(tok) : \
+    tTOKEN_INSTANCE_BEGIN<(tok)&&(tok)<tTOKEN_INSTANCE_END ? TOKEN2INSTANCEID(tok) : \
+    tTOKEN_GLOBAL_BEGIN<(tok)&&(tok)<tTOKEN_GLOBAL_END ? TOKEN2GLOBALID(tok) : \
+    tTOKEN_CONST_BEGIN<(tok)&&(tok)<tTOKEN_CONST_END ? TOKEN2CONSTID(tok) : \
+    tTOKEN_CLASS_BEGIN<(tok)&&(tok)<tTOKEN_CLASS_END ? TOKEN2CLASSID(tok) : \
+    tTOKEN_ATTRSET_BEGIN<(tok)&&(tok)<tTOKEN_ATTRSET_END ? TOKEN2ATTRSETID(tok) : \
+    ((tok) / ((tok)<tPRESERVED_ID_END && ((tok)>=128 || rb_ispunct(tok)))))
+
 /****** Ripper *******/
 
 #ifdef RIPPER
@@ -683,12 +692,8 @@ static void ripper_error_gen(struct pars https://github.com/ruby/ruby/blob/trunk/parse.y#L692
 
 #define yyparse ripper_yyparse
 
-#define ripper_intern(s) ID2SYM(rb_intern(s))
-static VALUE ripper_id2sym(ID);
-#ifdef __GNUC__
-#define ripper_id2sym(id) (rb_ispunct((int)(id)) ? \
-			   ID2SYM(id) : ripper_id2sym(id))
-#endif
+#define ripper_intern(s) STATIC_ID2SYM(rb_intern(s))
+#define TOKEN2VAL(t) STATIC_ID2SYM(TOKEN2ID(t))
 
 #define arg_new() dispatch0(args_new)
 #define arg_add(l,a) dispatch2(args_add, (l), (a))
@@ -744,7 +749,7 @@ static VALUE parser_heredoc_dedent(struc https://github.com/ruby/ruby/blob/trunk/parse.y#L749
 #define FIXME 0
 
 #else
-#define ripper_id2sym(id) id
+#define TOKEN2VAL(id) id
 #endif /* RIPPER */
 
 #ifndef RIPPER
@@ -1372,7 +1377,7 @@ command_asgn	: lhs '=' command_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L1377
 		| primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs
 		    {
 			value_expr($5);
-			$$ = new_attr_op_assign($1, ripper_id2sym(idCOLON2), $3, $4, $5);
+			$$ = new_attr_op_assign($1, TOKEN2VAL(tCOLON2), $3, $4, $5);
 		    }
 		| backref tOP_ASGN command_rhs
 		    {
@@ -1431,7 +1436,7 @@ expr		: command_call https://github.com/ruby/ruby/blob/trunk/parse.y#L1436
 		    /*%%%*/
 			$$ = call_uni_op(method_cond($2), '!');
 		    /*%
-			$$ = dispatch2(unary, ripper_id2sym('!'), $2);
+			$$ = dispatch2(unary, TOKEN2VAL('!'), $2);
 		    %*/
 		    }
 		| arg
@@ -1540,7 +1545,7 @@ command		: fcall command_args       %pre https://github.com/ruby/ruby/blob/trunk/parse.y#L1545
 			$$ = NEW_CALL($1, $3, $4);
 			fixpos($$, $1);
 		    /*%
-			$$ = dispatch4(command_call, $1, ID2SYM(idCOLON2), $3, $4);
+			$$ = dispatch4(command_call, $1, TOKEN2VAL(tCOLON2), $3, $4);
 		    %*/
 		    }
 		| primary_value tCOLON2 operation2 command_args cmd_brace_block
@@ -1551,7 +1556,7 @@ command		: fcall command_args       %pre https://github.com/ruby/ruby/blob/trunk/parse.y#L1556
 			$$ = $5;
 			fixpos($$, $1);
 		    /*%
-			$$ = dispatch4(command_call, $1, ID2SYM(idCOLON2), $3, $4);
+			$$ = dispatch4(command_call, $1, TOKEN2VAL(tCOLON2), $3, $4);
 			$$ = method_add_block($$, $5);
 		    %*/
 		   }
@@ -1848,7 +1853,7 @@ lhs		: user_variable https://github.com/ruby/ruby/blob/trunk/parse.y#L1853
 		    /*%%%*/
 			$$ = attrset($1, idCOLON2, $3);
 		    /*%
-			$$ = dispatch3(field, $1, ID2SYM(idCOLON2), $3);
+			$$ = dispatch3(field, $1, TOKEN2VAL(tCOLON2), $3);
 		    %*/
 		    }
 		| primary_value call_op tCONSTANT
@@ -2057,7 +2062,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2062
 		| primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs
 		    {
 			value_expr($5);
-			$$ = new_attr_op_assign($1, ripper_id2sym(idCOLON2), $3, $4, $5);
+			$$ = new_attr_op_assign($1, TOKEN2VAL(tCOLON2), $3, $4, $5);
 		    }
 		| primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs
 		    {
@@ -2099,7 +2104,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2104
 		    /*%%%*/
 			$$ = call_bin_op($1, '+', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('+'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('+'), $3);
 		    %*/
 		    }
 		| arg '-' arg
@@ -2107,7 +2112,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2112
 		    /*%%%*/
 			$$ = call_bin_op($1, '-', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('-'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('-'), $3);
 		    %*/
 		    }
 		| arg '*' arg
@@ -2115,7 +2120,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2120
 		    /*%%%*/
 			$$ = call_bin_op($1, '*', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('*'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('*'), $3);
 		    %*/
 		    }
 		| arg '/' arg
@@ -2123,7 +2128,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2128
 		    /*%%%*/
 			$$ = call_bin_op($1, '/', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('/'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('/'), $3);
 		    %*/
 		    }
 		| arg '%' arg
@@ -2131,7 +2136,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2136
 		    /*%%%*/
 			$$ = call_bin_op($1, '%', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('%'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('%'), $3);
 		    %*/
 		    }
 		| arg tPOW arg
@@ -2139,7 +2144,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2144
 		    /*%%%*/
 			$$ = call_bin_op($1, tPOW, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idPow), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tPOW), $3);
 		    %*/
 		    }
 		| tUMINUS_NUM simple_numeric tPOW arg
@@ -2147,8 +2152,8 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2152
 		    /*%%%*/
 			$$ = NEW_CALL(call_bin_op($2, tPOW, $4), tUMINUS, 0);
 		    /*%
-			$$ = dispatch3(binary, $2, ID2SYM(idPow), $4);
-			$$ = dispatch2(unary, ID2SYM(idUMinus), $$);
+			$$ = dispatch3(binary, $2, TOKEN2VAL(tPOW), $4);
+			$$ = dispatch2(unary, TOKEN2VAL(tUMINUS), $$);
 		    %*/
 		    }
 		| tUPLUS arg
@@ -2156,7 +2161,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2161
 		    /*%%%*/
 			$$ = call_uni_op($2, tUPLUS);
 		    /*%
-			$$ = dispatch2(unary, ID2SYM(idUPlus), $2);
+			$$ = dispatch2(unary, TOKEN2VAL(tUPLUS), $2);
 		    %*/
 		    }
 		| tUMINUS arg
@@ -2164,7 +2169,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2169
 		    /*%%%*/
 			$$ = call_uni_op($2, tUMINUS);
 		    /*%
-			$$ = dispatch2(unary, ID2SYM(idUMinus), $2);
+			$$ = dispatch2(unary, TOKEN2VAL(tUMINUS), $2);
 		    %*/
 		    }
 		| arg '|' arg
@@ -2172,7 +2177,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2177
 		    /*%%%*/
 			$$ = call_bin_op($1, '|', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('|'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('|'), $3);
 		    %*/
 		    }
 		| arg '^' arg
@@ -2180,7 +2185,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2185
 		    /*%%%*/
 			$$ = call_bin_op($1, '^', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('^'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('^'), $3);
 		    %*/
 		    }
 		| arg '&' arg
@@ -2188,7 +2193,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2193
 		    /*%%%*/
 			$$ = call_bin_op($1, '&', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('&'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('&'), $3);
 		    %*/
 		    }
 		| arg tCMP arg
@@ -2196,7 +2201,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2201
 		    /*%%%*/
 			$$ = call_bin_op($1, tCMP, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idCmp), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tCMP), $3);
 		    %*/
 		    }
 		| arg '>' arg
@@ -2204,7 +2209,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2209
 		    /*%%%*/
 			$$ = call_bin_op($1, '>', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('>'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('>'), $3);
 		    %*/
 		    }
 		| arg tGEQ arg
@@ -2212,7 +2217,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2217
 		    /*%%%*/
 			$$ = call_bin_op($1, tGEQ, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idGE), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tGEQ), $3);
 		    %*/
 		    }
 		| arg '<' arg
@@ -2220,7 +2225,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2225
 		    /*%%%*/
 			$$ = call_bin_op($1, '<', $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('<'), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL('<'), $3);
 		    %*/
 		    }
 		| arg tLEQ arg
@@ -2228,7 +2233,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2233
 		    /*%%%*/
 			$$ = call_bin_op($1, tLEQ, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idLE), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tLEQ), $3);
 		    %*/
 		    }
 		| arg tEQ arg
@@ -2236,7 +2241,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2241
 		    /*%%%*/
 			$$ = call_bin_op($1, tEQ, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idEq), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tEQ), $3);
 		    %*/
 		    }
 		| arg tEQQ arg
@@ -2244,7 +2249,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2249
 		    /*%%%*/
 			$$ = call_bin_op($1, tEQQ, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idEqq), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tEQQ), $3);
 		    %*/
 		    }
 		| arg tNEQ arg
@@ -2252,7 +2257,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2257
 		    /*%%%*/
 			$$ = call_bin_op($1, tNEQ, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idNeq), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tNEQ), $3);
 		    %*/
 		    }
 		| arg tMATCH arg
@@ -2260,7 +2265,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2265
 		    /*%%%*/
 			$$ = match_op($1, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idEqTilde), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tMATCH), $3);
 		    %*/
 		    }
 		| arg tNMATCH arg
@@ -2268,7 +2273,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2273
 		    /*%%%*/
 			$$ = call_bin_op($1, tNMATCH, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idNeqTilde), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tNMATCH), $3);
 		    %*/
 		    }
 		| '!' arg
@@ -2276,7 +2281,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2281
 		    /*%%%*/
 			$$ = call_uni_op(method_cond($2), '!');
 		    /*%
-			$$ = dispatch2(unary, ID2SYM('!'), $2);
+			$$ = dispatch2(unary, TOKEN2VAL('!'), $2);
 		    %*/
 		    }
 		| '~' arg
@@ -2284,7 +2289,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2289
 		    /*%%%*/
 			$$ = call_uni_op($2, '~');
 		    /*%
-			$$ = dispatch2(unary, ID2SYM('~'), $2);
+			$$ = dispatch2(unary, TOKEN2VAL('~'), $2);
 		    %*/
 		    }
 		| arg tLSHFT arg
@@ -2292,7 +2297,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2297
 		    /*%%%*/
 			$$ = call_bin_op($1, tLSHFT, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idLTLT), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tLSHFT), $3);
 		    %*/
 		    }
 		| arg tRSHFT arg
@@ -2300,7 +2305,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2305
 		    /*%%%*/
 			$$ = call_bin_op($1, tRSHFT, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idGTGT), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tRSHFT), $3);
 		    %*/
 		    }
 		| arg tANDOP arg
@@ -2308,7 +2313,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2313
 		    /*%%%*/
 			$$ = logop(NODE_AND, $1, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idANDOP), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tANDOP), $3);
 		    %*/
 		    }
 		| arg tOROP arg
@@ -2316,7 +2321,7 @@ arg		: lhs '=' arg_rhs https://github.com/ruby/ruby/blob/trunk/parse.y#L2321
 		    /*%%%*/
 			$$ = logop(NODE_OR, $1, $3);
 		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM(idOROP), $3);
+			$$ = dispatch3(binary, $1, TOKEN2VAL(tOROP), $3);
 		    %*/
 		    }
 		| keyword_defined opt_nl {in_defined = 1;} arg
@@ -3642,7 +3647,7 @@ method_call	: fcall paren_args https://github.com/ruby/ruby/blob/trunk/parse.y#L3647
 			$$ = NEW_CALL($1, $3, $5);
 			nd_set_line($$, $<num>4);
 		    /*%
-			$$ = dispatch3(call, $1, ripper_id2sym(idCOLON2), $3);
+			$$ = dispatch3(call, $1, TOKEN2VAL(tCOLON2), $3);
 			$$ = method_optarg($$, $5);
 		    %*/
 		    }
@@ -3651,7 +3656,7 @@ method_call	: fcall paren_args https://github.com/ruby/ruby/blob/trunk/parse.y#L3656
 		    /*%%%*/
 			$$ = NEW_CALL($1, $3, 0);
 		    /*%
-			$$ = dispatch3(call, $1, ID2SYM(idCOLON2), $3);
+			$$ = dispatch3(call, $1, TOKEN2VAL(tCOLON2), $3);
 		    %*/
 		    }
 		| primary_value call_op
@@ -4281,7 +4286,7 @@ numeric 	: simple_numeric https://github.com/ruby/ruby/blob/trunk/parse.y#L4286
 			$$ = $2;
 			$$->nd_lit = negate_lit($$->nd_lit);
 		    /*%
-			$$ = dispatch2(unary, ID2SYM(idUMinus), $2);
+			$$ = dispatch2(unary, TOKEN2VAL(tUMINUS), $2);
 		    %*/
 		    }
 		;
@@ -4987,30 +4992,18 @@ dot_or_colon	: '.' https://github.com/ruby/ruby/blob/trunk/parse.y#L4992
 
 call_op 	: '.'
 		    {
-		    /*%%%*/
-			$$ = '.';
-		    /*%
-			$$ = ripper_id2sym('.');
-		    %*/
+			$$ = TOKEN2VAL('.');
 		    }
 		| tANDDOT
 		    {
-		    /*%%%*/
-			$$ = tANDDOT;
-		    /*%
-			$$ = ripper_id2sym(idANDDOT);
-		    %*/
+			$$ = TOKEN2VAL(tANDDOT);
 		    }
 		;
 
 call_op2	: call_op
 		| tCOLON2
 		    {
-		    /*%%%*/
-			$$ = tCOLON2;
-		    /*%
-			$$ = ripper_id2sym(idCOLON2);
-		    %*/
+			$$ = TOKEN2VAL(tCOLON2);
 		    }
 		;
 
@@ -11202,94 +11195,6 @@ ripper_dispatch7(struct parser_params *p https://github.com/ruby/ruby/blob/trunk/parse.y#L11195
     return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
 }
 
-static const struct kw_assoc {
-    ID id;
-    const char *name;
-} keyword_to_name[] = {
-    {keyword_class,	"class"},
-    {keyword_module,	"module"},
-    {keyword_def,	"def"},
-    {keyword_undef,	"undef"},
-    {keyword_begin,	"begin"},
-    {keyword_rescue,	"rescue"},
-    {keyword_ensure,	"ensure"},
-    {keyword_end,	"end"},
-    {keyword_if,	"if"},
-    {keyword_unless,	"unless"},
-    {keyword_then,	"then"},
-    {keyword_elsif,	"elsif"},
-    {keyword_else,	"else"},
-    {keyword_case,	"case"},
-    {keyword_when,	"when"},
-    {keyword_while,	"while"},
-    {keyword_until,	"until"},
-    {keyword_for,	"for"},
-    {keyword_break,	"break"},
-    {keyword_next,	"next"},
-    {keyword_redo,	"redo"},
-    {keyword_retry,	"retry"},
-    {keyword_in,	"in"},
-    {keyword_do,	"do"},
-    {keyword_do_cond,	"do"},
-    {keyword_do_block,	"do"},
-    {keyword_return,	"return"},
-    {keyword_yield,	"yield"},
-    {keyword_super,	"super"},
-    {keyword_self,	"self"},
-    {keyword_nil,	"nil"},
-    {keyword_true,	"true"},
-    {keyword_false,	"false"},
-    {keyword_and,	"and"},
-    {keyword_or,	"or"},
-    {keyword_not,	"not"},
-    {modifier_if,	"if"},
-    {modifier_unless,	"unless"},
-    {modifier_while,	"while"},
-    {modifier_until,	"until"},
-    {modifier_rescue,	"rescue"},
-    {keyword_alias,	"alias"},
-    {keyword_defined,	"defined?"},
-    {keyword_BEGIN,	"BEGIN"},
-    {keyword_END,	"END"},
-    {keyword__LINE__,	"__LINE__"},
-    {keyword__FILE__,	"__FILE__"},
-    {keyword__ENCODING__, "__ENCODING__"},
-    {0, NULL}
-};
-
-static const char*
-keyword_id_to_str(ID id)
-{
-    const struct kw_assoc *a;
-
-    for (a = keyword_to_name; a->id; a++) {
-        if (a->id == id)
-            return a->name;
-    }
-    return NULL;
-}
-
-#undef ripper_id2sym
-static VALUE
-ripper_id2sym(ID id)
-{
-    const char *name;
-    char buf[8];
-
-    if (id == (ID)(signed char)id) {
-        buf[0] = (char)id;
-        buf[1] = '\0';
-        return ID2SYM(rb_intern2(buf, 1));
-    }
-    if ((name = keyword_id_to_str(id))) {
-        return ID2SYM(rb_intern(name));
-    }
-    if (!rb_id2str(id)) {
-	rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
-    }
-    return ID2SYM(id);
-}
-
 static ID
 ripper_get_id(VALUE v)
 {
Index: template/id.h.tmpl
===================================================================
--- template/id.h.tmpl	(revision 57597)
+++ template/id.h.tmpl	(revision 57598)
@@ -57,6 +57,11 @@ enum ruby_id_types { https://github.com/ruby/ruby/blob/trunk/template/id.h.tmpl#L57
 % end
 #define RUBY_TOKEN(t) RUBY_TOKEN_##t
 
+#define RUBY_TOKEN2ID_TYPE(tok, type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM)
+% types.each do |type|
+#define TOKEN2<%=type%>ID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_<%=type%>)
+% end
+
 enum ruby_method_ids {
 % ids[:token_op].uniq {|_, op| op}.each do |id, op, token|
     id<%=id%> = <%=token ? "RUBY_TOKEN(#{token})" : "'#{op}'"%>,
@@ -66,16 +71,23 @@ enum ruby_method_ids { https://github.com/ruby/ruby/blob/trunk/template/id.h.tmpl#L71
     id<%=token%>,
 % end
     tPRESERVED_ID_END,
-% ids.values_at(*types).flatten.each do |token|
+% prev = 'tPRESERVED_ID_END'
+% types.each do |type|
+%   tokens = ids[type]
+    tTOKEN_<%=type%>_BEGIN = <%=prev%>-1,
+%   tokens.each do |token|
     t<%=token%>,
+%   end
+%   prev = "tTOKEN_#{type}_END"
+    <%=prev%>,
 % end
-    tNEXT_ID,
+    tNEXT_ID = <%=prev%>,
 % types.each do |type|
-%   types = ids[type] or next
-%   types.empty? and next
-#define TOKEN2<%=type%>ID(n) id##n = ((t##n<<ID_SCOPE_SHIFT)|ID_<%=type%>|ID_STATIC_SYM)
-%   types.each do |token|
-    TOKEN2<%=type%>ID(<%=token%>),
+%   tokens = ids[type]
+#define DEFINE_<%=type%>ID_FROM_TOKEN(n) id##n = TOKEN2<%=type%>ID(t##n)
+%   tokens or next
+%   tokens.each do |token|
+    DEFINE_<%=type%>ID_FROM_TOKEN(<%=token%>),
 %   end
 % end
     tLAST_OP_ID = tPRESERVED_ID_END-1,

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

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