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