1#define tIGNORED_NL      (tLAST_TOKEN + 1)
2#define tCOMMENT         (tLAST_TOKEN + 2)
3#define tEMBDOC_BEG      (tLAST_TOKEN + 3)
4#define tEMBDOC          (tLAST_TOKEN + 4)
5#define tEMBDOC_END      (tLAST_TOKEN + 5)
6#define tSP              (tLAST_TOKEN + 6)
7#define tHEREDOC_BEG     (tLAST_TOKEN + 7)
8#define tHEREDOC_END     (tLAST_TOKEN + 8)
9#define k__END__         (tLAST_TOKEN + 9)
10
11static ID ripper_id_backref;
12static ID ripper_id_backtick;
13static ID ripper_id_comma;
14static ID ripper_id_const;
15static ID ripper_id_cvar;
16static ID ripper_id_embexpr_beg;
17static ID ripper_id_embexpr_end;
18static ID ripper_id_embvar;
19static ID ripper_id_float;
20static ID ripper_id_gvar;
21static ID ripper_id_ident;
22static ID ripper_id_int;
23static ID ripper_id_ivar;
24static ID ripper_id_kw;
25static ID ripper_id_lbrace;
26static ID ripper_id_lbracket;
27static ID ripper_id_lparen;
28static ID ripper_id_nl;
29static ID ripper_id_op;
30static ID ripper_id_period;
31static ID ripper_id_rbrace;
32static ID ripper_id_rbracket;
33static ID ripper_id_rparen;
34static ID ripper_id_semicolon;
35static ID ripper_id_symbeg;
36static ID ripper_id_tstring_beg;
37static ID ripper_id_tstring_content;
38static ID ripper_id_tstring_end;
39static ID ripper_id_words_beg;
40static ID ripper_id_qwords_beg;
41static ID ripper_id_qsymbols_beg;
42static ID ripper_id_symbols_beg;
43static ID ripper_id_words_sep;
44static ID ripper_id_regexp_beg;
45static ID ripper_id_regexp_end;
46static ID ripper_id_label;
47static ID ripper_id_tlambda;
48static ID ripper_id_tlambeg;
49
50static ID ripper_id_ignored_nl;
51static ID ripper_id_comment;
52static ID ripper_id_embdoc_beg;
53static ID ripper_id_embdoc;
54static ID ripper_id_embdoc_end;
55static ID ripper_id_sp;
56static ID ripper_id_heredoc_beg;
57static ID ripper_id_heredoc_end;
58static ID ripper_id___end__;
59static ID ripper_id_CHAR;
60
61#include "eventids2table.c"
62
63static void
64ripper_init_eventids2(void)
65{
66    ripper_id_backref = rb_intern_const("on_backref");
67    ripper_id_backtick = rb_intern_const("on_backtick");
68    ripper_id_comma = rb_intern_const("on_comma");
69    ripper_id_const = rb_intern_const("on_const");
70    ripper_id_cvar = rb_intern_const("on_cvar");
71    ripper_id_embexpr_beg = rb_intern_const("on_embexpr_beg");
72    ripper_id_embexpr_end = rb_intern_const("on_embexpr_end");
73    ripper_id_embvar = rb_intern_const("on_embvar");
74    ripper_id_float = rb_intern_const("on_float");
75    ripper_id_gvar = rb_intern_const("on_gvar");
76    ripper_id_ident = rb_intern_const("on_ident");
77    ripper_id_int = rb_intern_const("on_int");
78    ripper_id_ivar = rb_intern_const("on_ivar");
79    ripper_id_kw = rb_intern_const("on_kw");
80    ripper_id_lbrace = rb_intern_const("on_lbrace");
81    ripper_id_lbracket = rb_intern_const("on_lbracket");
82    ripper_id_lparen = rb_intern_const("on_lparen");
83    ripper_id_nl = rb_intern_const("on_nl");
84    ripper_id_op = rb_intern_const("on_op");
85    ripper_id_period = rb_intern_const("on_period");
86    ripper_id_rbrace = rb_intern_const("on_rbrace");
87    ripper_id_rbracket = rb_intern_const("on_rbracket");
88    ripper_id_rparen = rb_intern_const("on_rparen");
89    ripper_id_semicolon = rb_intern_const("on_semicolon");
90    ripper_id_symbeg = rb_intern_const("on_symbeg");
91    ripper_id_tstring_beg = rb_intern_const("on_tstring_beg");
92    ripper_id_tstring_content = rb_intern_const("on_tstring_content");
93    ripper_id_tstring_end = rb_intern_const("on_tstring_end");
94    ripper_id_words_beg = rb_intern_const("on_words_beg");
95    ripper_id_qwords_beg = rb_intern_const("on_qwords_beg");
96    ripper_id_qsymbols_beg = rb_intern_const("on_qsymbols_beg");
97    ripper_id_symbols_beg = rb_intern_const("on_symbols_beg");
98    ripper_id_words_sep = rb_intern_const("on_words_sep");
99    ripper_id_regexp_beg = rb_intern_const("on_regexp_beg");
100    ripper_id_regexp_end = rb_intern_const("on_regexp_end");
101    ripper_id_label = rb_intern_const("on_label");
102    ripper_id_tlambda = rb_intern_const("on_tlambda");
103    ripper_id_tlambeg = rb_intern_const("on_tlambeg");
104
105    ripper_id_ignored_nl = rb_intern_const("on_ignored_nl");
106    ripper_id_comment = rb_intern_const("on_comment");
107    ripper_id_embdoc_beg = rb_intern_const("on_embdoc_beg");
108    ripper_id_embdoc = rb_intern_const("on_embdoc");
109    ripper_id_embdoc_end = rb_intern_const("on_embdoc_end");
110    ripper_id_sp = rb_intern_const("on_sp");
111    ripper_id_heredoc_beg = rb_intern_const("on_heredoc_beg");
112    ripper_id_heredoc_end = rb_intern_const("on_heredoc_end");
113    ripper_id___end__ = rb_intern_const("on___end__");
114    ripper_id_CHAR = rb_intern_const("on_CHAR");
115}
116
117static const struct token_assoc {
118    int token;
119    ID *id;
120} token_to_eventid[] = {
121    {' ',		&ripper_id_words_sep},
122    {'!',		&ripper_id_op},
123    {'%',		&ripper_id_op},
124    {'&',		&ripper_id_op},
125    {'*',		&ripper_id_op},
126    {'+',		&ripper_id_op},
127    {'-',		&ripper_id_op},
128    {'/',		&ripper_id_op},
129    {'<',		&ripper_id_op},
130    {'=',		&ripper_id_op},
131    {'>',		&ripper_id_op},
132    {'?',		&ripper_id_op},
133    {'^',		&ripper_id_op},
134    {'|',		&ripper_id_op},
135    {'~',		&ripper_id_op},
136    {':',		&ripper_id_op},
137    {',',		&ripper_id_comma},
138    {'.',		&ripper_id_period},
139    {';',		&ripper_id_semicolon},
140    {'`',		&ripper_id_backtick},
141    {'\n',              &ripper_id_nl},
142    {keyword_alias,	&ripper_id_kw},
143    {keyword_and,	&ripper_id_kw},
144    {keyword_begin,	&ripper_id_kw},
145    {keyword_break,	&ripper_id_kw},
146    {keyword_case,	&ripper_id_kw},
147    {keyword_class,	&ripper_id_kw},
148    {keyword_def,	&ripper_id_kw},
149    {keyword_defined,	&ripper_id_kw},
150    {keyword_do,	&ripper_id_kw},
151    {keyword_do_block,	&ripper_id_kw},
152    {keyword_do_cond,	&ripper_id_kw},
153    {keyword_else,	&ripper_id_kw},
154    {keyword_elsif,	&ripper_id_kw},
155    {keyword_end,	&ripper_id_kw},
156    {keyword_ensure,	&ripper_id_kw},
157    {keyword_false,	&ripper_id_kw},
158    {keyword_for,	&ripper_id_kw},
159    {keyword_if,	&ripper_id_kw},
160    {modifier_if,	&ripper_id_kw},
161    {keyword_in,	&ripper_id_kw},
162    {keyword_module,	&ripper_id_kw},
163    {keyword_next,	&ripper_id_kw},
164    {keyword_nil,	&ripper_id_kw},
165    {keyword_not,	&ripper_id_kw},
166    {keyword_or,	&ripper_id_kw},
167    {keyword_redo,	&ripper_id_kw},
168    {keyword_rescue,	&ripper_id_kw},
169    {modifier_rescue,	&ripper_id_kw},
170    {keyword_retry,	&ripper_id_kw},
171    {keyword_return,	&ripper_id_kw},
172    {keyword_self,	&ripper_id_kw},
173    {keyword_super,	&ripper_id_kw},
174    {keyword_then,	&ripper_id_kw},
175    {keyword_true,	&ripper_id_kw},
176    {keyword_undef,	&ripper_id_kw},
177    {keyword_unless,	&ripper_id_kw},
178    {modifier_unless,	&ripper_id_kw},
179    {keyword_until,	&ripper_id_kw},
180    {modifier_until,	&ripper_id_kw},
181    {keyword_when,	&ripper_id_kw},
182    {keyword_while,	&ripper_id_kw},
183    {modifier_while,	&ripper_id_kw},
184    {keyword_yield,	&ripper_id_kw},
185    {keyword__FILE__,	&ripper_id_kw},
186    {keyword__LINE__,	&ripper_id_kw},
187    {keyword__ENCODING__, &ripper_id_kw},
188    {keyword_BEGIN,	&ripper_id_kw},
189    {keyword_END,	&ripper_id_kw},
190    {keyword_do_LAMBDA,	&ripper_id_kw},
191    {tAMPER,		&ripper_id_op},
192    {tANDOP,		&ripper_id_op},
193    {tAREF,		&ripper_id_op},
194    {tASET,		&ripper_id_op},
195    {tASSOC,		&ripper_id_op},
196    {tBACK_REF,		&ripper_id_backref},
197    {tCHAR,		&ripper_id_CHAR},
198    {tCMP,		&ripper_id_op},
199    {tCOLON2,		&ripper_id_op},
200    {tCOLON3,		&ripper_id_op},
201    {tCONSTANT,		&ripper_id_const},
202    {tCVAR,		&ripper_id_cvar},
203    {tDOT2,		&ripper_id_op},
204    {tDOT3,		&ripper_id_op},
205    {tEQ,		&ripper_id_op},
206    {tEQQ,		&ripper_id_op},
207    {tFID,		&ripper_id_ident},
208    {tFLOAT,		&ripper_id_float},
209    {tGEQ,		&ripper_id_op},
210    {tGVAR,		&ripper_id_gvar},
211    {tIDENTIFIER,	&ripper_id_ident},
212    {tINTEGER,		&ripper_id_int},
213    {tIVAR,		&ripper_id_ivar},
214    {tLBRACE,		&ripper_id_lbrace},
215    {tLBRACE_ARG,	&ripper_id_lbrace},
216    {'{',       	&ripper_id_lbrace},
217    {'}',       	&ripper_id_rbrace},
218    {tLBRACK,		&ripper_id_lbracket},
219    {'[',       	&ripper_id_lbracket},
220    {']',       	&ripper_id_rbracket},
221    {tLEQ,		&ripper_id_op},
222    {tLPAREN,		&ripper_id_lparen},
223    {tLPAREN_ARG,	&ripper_id_lparen},
224    {'(',		&ripper_id_lparen},
225    {')',		&ripper_id_rparen},
226    {tLSHFT,		&ripper_id_op},
227    {tMATCH,		&ripper_id_op},
228    {tNEQ,		&ripper_id_op},
229    {tNMATCH,		&ripper_id_op},
230    {tNTH_REF,		&ripper_id_backref},
231    {tOP_ASGN,		&ripper_id_op},
232    {tOROP,		&ripper_id_op},
233    {tPOW,		&ripper_id_op},
234    {tQWORDS_BEG,	&ripper_id_qwords_beg},
235    {tQSYMBOLS_BEG,	&ripper_id_qsymbols_beg},
236    {tSYMBOLS_BEG,	&ripper_id_symbols_beg},
237    {tREGEXP_BEG,	&ripper_id_regexp_beg},
238    {tREGEXP_END,	&ripper_id_regexp_end},
239    {tRPAREN,		&ripper_id_rparen},
240    {tRSHFT,		&ripper_id_op},
241    {tSTAR,		&ripper_id_op},
242    {tDSTAR,		&ripper_id_op},
243    {tSTRING_BEG,	&ripper_id_tstring_beg},
244    {tSTRING_CONTENT,	&ripper_id_tstring_content},
245    {tSTRING_DBEG,	&ripper_id_embexpr_beg},
246    {tSTRING_DEND,	&ripper_id_embexpr_end},
247    {tSTRING_DVAR,	&ripper_id_embvar},
248    {tSTRING_END,	&ripper_id_tstring_end},
249    {tSYMBEG,		&ripper_id_symbeg},
250    {tUMINUS,		&ripper_id_op},
251    {tUMINUS_NUM,	&ripper_id_op},
252    {tUPLUS,		&ripper_id_op},
253    {tWORDS_BEG,	&ripper_id_words_beg},
254    {tXSTRING_BEG,	&ripper_id_backtick},
255    {tLABEL,		&ripper_id_label},
256    {tLAMBDA,		&ripper_id_tlambda},
257    {tLAMBEG,		&ripper_id_tlambeg},
258
259    /* ripper specific tokens */
260    {tIGNORED_NL,       &ripper_id_ignored_nl},
261    {tCOMMENT,          &ripper_id_comment},
262    {tEMBDOC_BEG,       &ripper_id_embdoc_beg},
263    {tEMBDOC,           &ripper_id_embdoc},
264    {tEMBDOC_END,       &ripper_id_embdoc_end},
265    {tSP,               &ripper_id_sp},
266    {tHEREDOC_BEG,      &ripper_id_heredoc_beg},
267    {tHEREDOC_END,      &ripper_id_heredoc_end},
268    {k__END__,          &ripper_id___end__},
269    {0, NULL}
270};
271
272static ID
273ripper_token2eventid(int tok)
274{
275    const struct token_assoc *a;
276
277    for (a = token_to_eventid; a->id != NULL; a++) {
278        if (a->token == tok)
279            return *a->id;
280    }
281    if (tok < 256) {
282        return ripper_id_CHAR;
283    }
284    rb_raise(rb_eRuntimeError, "[Ripper FATAL] unknown token %d", tok);
285
286    UNREACHABLE;
287}
288