aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-03 01:38:52 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-03 01:38:52 +0000
commitca71699bcb76708105908786f67bea6e263595c9 (patch)
tree55fd6e02a50a8b0c52f4d23e4cd6c6af28b3d46c
parentfdcac03d9e37a4b80f1c4edc20a5944a88421559 (diff)
downloadruby-ca71699bcb76708105908786f67bea6e263595c9.tar.gz
parse.y: set ripper event ID symbols to operators
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--parse.y67
1 files changed, 36 insertions, 31 deletions
diff --git a/parse.y b/parse.y
index ca9115de6b..af265167fb 100644
--- a/parse.y
+++ b/parse.y
@@ -636,13 +636,16 @@ static int lvar_defined_gen(struct parser_params*, ID);
#define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
#define nd_nest u3.cnt
-#define TOKEN2ID(tok) ( \
+#define TOKEN2ID_OR(tok, or) ( \
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) : \
+ or)
+
+#define TOKEN2ID(tok) TOKEN2ID_OR(tok, \
((tok) / ((tok)<tPRESERVED_ID_END && ((tok)>=128 || rb_ispunct(tok)))))
/****** Ripper *******/
@@ -677,6 +680,7 @@ static void ripper_error_gen(struct parser_params *parser);
#define ID2VAL(id) STATIC_ID2SYM(id)
#define TOKEN2VAL(t) ID2VAL(TOKEN2ID(t))
+#define TOKEN2EID(t) ID2SYM(TOKEN2ID_OR(t, ripper_token2eventid(t)))
#define arg_new() dispatch0(args_new)
#define arg_add(l,a) dispatch2(args_add, (l), (a))
@@ -733,6 +737,7 @@ static VALUE parser_heredoc_dedent(struct parser_params*,VALUE);
#else
#define ID2VAL(id) ((VALUE)(id))
#define TOKEN2VAL(t) ID2VAL(t)
+#define TOKEN2EID(t) (t)
#endif /* RIPPER */
#ifndef RIPPER
@@ -1918,36 +1923,36 @@ undef_list : fitem
}
;
-op : '|' { ifndef_ripper($$ = '|'); }
- | '^' { ifndef_ripper($$ = '^'); }
- | '&' { ifndef_ripper($$ = '&'); }
- | tCMP { ifndef_ripper($$ = tCMP); }
- | tEQ { ifndef_ripper($$ = tEQ); }
- | tEQQ { ifndef_ripper($$ = tEQQ); }
- | tMATCH { ifndef_ripper($$ = tMATCH); }
- | tNMATCH { ifndef_ripper($$ = tNMATCH); }
- | '>' { ifndef_ripper($$ = '>'); }
- | tGEQ { ifndef_ripper($$ = tGEQ); }
- | '<' { ifndef_ripper($$ = '<'); }
- | tLEQ { ifndef_ripper($$ = tLEQ); }
- | tNEQ { ifndef_ripper($$ = tNEQ); }
- | tLSHFT { ifndef_ripper($$ = tLSHFT); }
- | tRSHFT { ifndef_ripper($$ = tRSHFT); }
- | '+' { ifndef_ripper($$ = '+'); }
- | '-' { ifndef_ripper($$ = '-'); }
- | '*' { ifndef_ripper($$ = '*'); }
- | tSTAR { ifndef_ripper($$ = '*'); }
- | '/' { ifndef_ripper($$ = '/'); }
- | '%' { ifndef_ripper($$ = '%'); }
- | tPOW { ifndef_ripper($$ = tPOW); }
- | tDSTAR { ifndef_ripper($$ = tDSTAR); }
- | '!' { ifndef_ripper($$ = '!'); }
- | '~' { ifndef_ripper($$ = '~'); }
- | tUPLUS { ifndef_ripper($$ = tUPLUS); }
- | tUMINUS { ifndef_ripper($$ = tUMINUS); }
- | tAREF { ifndef_ripper($$ = tAREF); }
- | tASET { ifndef_ripper($$ = tASET); }
- | '`' { ifndef_ripper($$ = '`'); }
+op : '|' { $$ = TOKEN2EID('|'); }
+ | '^' { $$ = TOKEN2EID('^'); }
+ | '&' { $$ = TOKEN2EID('&'); }
+ | tCMP { $$ = TOKEN2EID(tCMP); }
+ | tEQ { $$ = TOKEN2EID(tEQ); }
+ | tEQQ { $$ = TOKEN2EID(tEQQ); }
+ | tMATCH { $$ = TOKEN2EID(tMATCH); }
+ | tNMATCH { $$ = TOKEN2EID(tNMATCH); }
+ | '>' { $$ = TOKEN2EID('>'); }
+ | tGEQ { $$ = TOKEN2EID(tGEQ); }
+ | '<' { $$ = TOKEN2EID('<'); }
+ | tLEQ { $$ = TOKEN2EID(tLEQ); }
+ | tNEQ { $$ = TOKEN2EID(tNEQ); }
+ | tLSHFT { $$ = TOKEN2EID(tLSHFT); }
+ | tRSHFT { $$ = TOKEN2EID(tRSHFT); }
+ | '+' { $$ = TOKEN2EID('+'); }
+ | '-' { $$ = TOKEN2EID('-'); }
+ | '*' { $$ = TOKEN2EID('*'); }
+ | tSTAR { $$ = TOKEN2EID('*'); }
+ | '/' { $$ = TOKEN2EID('/'); }
+ | '%' { $$ = TOKEN2EID('%'); }
+ | tPOW { $$ = TOKEN2EID(tPOW); }
+ | tDSTAR { $$ = TOKEN2EID(tDSTAR); }
+ | '!' { $$ = TOKEN2EID('!'); }
+ | '~' { $$ = TOKEN2EID('~'); }
+ | tUPLUS { $$ = TOKEN2EID(tUPLUS); }
+ | tUMINUS { $$ = TOKEN2EID(tUMINUS); }
+ | tAREF { $$ = TOKEN2EID(tAREF); }
+ | tASET { $$ = TOKEN2EID(tASET); }
+ | '`' { $$ = TOKEN2EID('`'); }
;
reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__