00001 #define tIGNORED_NL (tLAST_TOKEN + 1)
00002 #define tCOMMENT (tLAST_TOKEN + 2)
00003 #define tEMBDOC_BEG (tLAST_TOKEN + 3)
00004 #define tEMBDOC (tLAST_TOKEN + 4)
00005 #define tEMBDOC_END (tLAST_TOKEN + 5)
00006 #define tSP (tLAST_TOKEN + 6)
00007 #define tHEREDOC_BEG (tLAST_TOKEN + 7)
00008 #define tHEREDOC_END (tLAST_TOKEN + 8)
00009 #define k__END__ (tLAST_TOKEN + 9)
00010
00011 static ID ripper_id_backref;
00012 static ID ripper_id_backtick;
00013 static ID ripper_id_comma;
00014 static ID ripper_id_const;
00015 static ID ripper_id_cvar;
00016 static ID ripper_id_embexpr_beg;
00017 static ID ripper_id_embexpr_end;
00018 static ID ripper_id_embvar;
00019 static ID ripper_id_float;
00020 static ID ripper_id_gvar;
00021 static ID ripper_id_ident;
00022 static ID ripper_id_int;
00023 static ID ripper_id_ivar;
00024 static ID ripper_id_kw;
00025 static ID ripper_id_lbrace;
00026 static ID ripper_id_lbracket;
00027 static ID ripper_id_lparen;
00028 static ID ripper_id_nl;
00029 static ID ripper_id_op;
00030 static ID ripper_id_period;
00031 static ID ripper_id_rbrace;
00032 static ID ripper_id_rbracket;
00033 static ID ripper_id_rparen;
00034 static ID ripper_id_semicolon;
00035 static ID ripper_id_symbeg;
00036 static ID ripper_id_tstring_beg;
00037 static ID ripper_id_tstring_content;
00038 static ID ripper_id_tstring_end;
00039 static ID ripper_id_words_beg;
00040 static ID ripper_id_qwords_beg;
00041 static ID ripper_id_qsymbols_beg;
00042 static ID ripper_id_symbols_beg;
00043 static ID ripper_id_words_sep;
00044 static ID ripper_id_regexp_beg;
00045 static ID ripper_id_regexp_end;
00046 static ID ripper_id_label;
00047 static ID ripper_id_tlambda;
00048 static ID ripper_id_tlambeg;
00049
00050 static ID ripper_id_ignored_nl;
00051 static ID ripper_id_comment;
00052 static ID ripper_id_embdoc_beg;
00053 static ID ripper_id_embdoc;
00054 static ID ripper_id_embdoc_end;
00055 static ID ripper_id_sp;
00056 static ID ripper_id_heredoc_beg;
00057 static ID ripper_id_heredoc_end;
00058 static ID ripper_id___end__;
00059 static ID ripper_id_CHAR;
00060
00061 #include "eventids2table.c"
00062
00063 static void
00064 ripper_init_eventids2(void)
00065 {
00066 ripper_id_backref = rb_intern_const("on_backref");
00067 ripper_id_backtick = rb_intern_const("on_backtick");
00068 ripper_id_comma = rb_intern_const("on_comma");
00069 ripper_id_const = rb_intern_const("on_const");
00070 ripper_id_cvar = rb_intern_const("on_cvar");
00071 ripper_id_embexpr_beg = rb_intern_const("on_embexpr_beg");
00072 ripper_id_embexpr_end = rb_intern_const("on_embexpr_end");
00073 ripper_id_embvar = rb_intern_const("on_embvar");
00074 ripper_id_float = rb_intern_const("on_float");
00075 ripper_id_gvar = rb_intern_const("on_gvar");
00076 ripper_id_ident = rb_intern_const("on_ident");
00077 ripper_id_int = rb_intern_const("on_int");
00078 ripper_id_ivar = rb_intern_const("on_ivar");
00079 ripper_id_kw = rb_intern_const("on_kw");
00080 ripper_id_lbrace = rb_intern_const("on_lbrace");
00081 ripper_id_lbracket = rb_intern_const("on_lbracket");
00082 ripper_id_lparen = rb_intern_const("on_lparen");
00083 ripper_id_nl = rb_intern_const("on_nl");
00084 ripper_id_op = rb_intern_const("on_op");
00085 ripper_id_period = rb_intern_const("on_period");
00086 ripper_id_rbrace = rb_intern_const("on_rbrace");
00087 ripper_id_rbracket = rb_intern_const("on_rbracket");
00088 ripper_id_rparen = rb_intern_const("on_rparen");
00089 ripper_id_semicolon = rb_intern_const("on_semicolon");
00090 ripper_id_symbeg = rb_intern_const("on_symbeg");
00091 ripper_id_tstring_beg = rb_intern_const("on_tstring_beg");
00092 ripper_id_tstring_content = rb_intern_const("on_tstring_content");
00093 ripper_id_tstring_end = rb_intern_const("on_tstring_end");
00094 ripper_id_words_beg = rb_intern_const("on_words_beg");
00095 ripper_id_qwords_beg = rb_intern_const("on_qwords_beg");
00096 ripper_id_qsymbols_beg = rb_intern_const("on_qsymbols_beg");
00097 ripper_id_symbols_beg = rb_intern_const("on_symbols_beg");
00098 ripper_id_words_sep = rb_intern_const("on_words_sep");
00099 ripper_id_regexp_beg = rb_intern_const("on_regexp_beg");
00100 ripper_id_regexp_end = rb_intern_const("on_regexp_end");
00101 ripper_id_label = rb_intern_const("on_label");
00102 ripper_id_tlambda = rb_intern_const("on_tlambda");
00103 ripper_id_tlambeg = rb_intern_const("on_tlambeg");
00104
00105 ripper_id_ignored_nl = rb_intern_const("on_ignored_nl");
00106 ripper_id_comment = rb_intern_const("on_comment");
00107 ripper_id_embdoc_beg = rb_intern_const("on_embdoc_beg");
00108 ripper_id_embdoc = rb_intern_const("on_embdoc");
00109 ripper_id_embdoc_end = rb_intern_const("on_embdoc_end");
00110 ripper_id_sp = rb_intern_const("on_sp");
00111 ripper_id_heredoc_beg = rb_intern_const("on_heredoc_beg");
00112 ripper_id_heredoc_end = rb_intern_const("on_heredoc_end");
00113 ripper_id___end__ = rb_intern_const("on___end__");
00114 ripper_id_CHAR = rb_intern_const("on_CHAR");
00115 }
00116
00117 static const struct token_assoc {
00118 int token;
00119 ID *id;
00120 } token_to_eventid[] = {
00121 {' ', &ripper_id_words_sep},
00122 {'!', &ripper_id_op},
00123 {'%', &ripper_id_op},
00124 {'&', &ripper_id_op},
00125 {'*', &ripper_id_op},
00126 {'+', &ripper_id_op},
00127 {'-', &ripper_id_op},
00128 {'/', &ripper_id_op},
00129 {'<', &ripper_id_op},
00130 {'=', &ripper_id_op},
00131 {'>', &ripper_id_op},
00132 {'?', &ripper_id_op},
00133 {'^', &ripper_id_op},
00134 {'|', &ripper_id_op},
00135 {'~', &ripper_id_op},
00136 {':', &ripper_id_op},
00137 {',', &ripper_id_comma},
00138 {'.', &ripper_id_period},
00139 {';', &ripper_id_semicolon},
00140 {'`', &ripper_id_backtick},
00141 {'\n', &ripper_id_nl},
00142 {keyword_alias, &ripper_id_kw},
00143 {keyword_and, &ripper_id_kw},
00144 {keyword_begin, &ripper_id_kw},
00145 {keyword_break, &ripper_id_kw},
00146 {keyword_case, &ripper_id_kw},
00147 {keyword_class, &ripper_id_kw},
00148 {keyword_def, &ripper_id_kw},
00149 {keyword_defined, &ripper_id_kw},
00150 {keyword_do, &ripper_id_kw},
00151 {keyword_do_block, &ripper_id_kw},
00152 {keyword_do_cond, &ripper_id_kw},
00153 {keyword_else, &ripper_id_kw},
00154 {keyword_elsif, &ripper_id_kw},
00155 {keyword_end, &ripper_id_kw},
00156 {keyword_ensure, &ripper_id_kw},
00157 {keyword_false, &ripper_id_kw},
00158 {keyword_for, &ripper_id_kw},
00159 {keyword_if, &ripper_id_kw},
00160 {modifier_if, &ripper_id_kw},
00161 {keyword_in, &ripper_id_kw},
00162 {keyword_module, &ripper_id_kw},
00163 {keyword_next, &ripper_id_kw},
00164 {keyword_nil, &ripper_id_kw},
00165 {keyword_not, &ripper_id_kw},
00166 {keyword_or, &ripper_id_kw},
00167 {keyword_redo, &ripper_id_kw},
00168 {keyword_rescue, &ripper_id_kw},
00169 {modifier_rescue, &ripper_id_kw},
00170 {keyword_retry, &ripper_id_kw},
00171 {keyword_return, &ripper_id_kw},
00172 {keyword_self, &ripper_id_kw},
00173 {keyword_super, &ripper_id_kw},
00174 {keyword_then, &ripper_id_kw},
00175 {keyword_true, &ripper_id_kw},
00176 {keyword_undef, &ripper_id_kw},
00177 {keyword_unless, &ripper_id_kw},
00178 {modifier_unless, &ripper_id_kw},
00179 {keyword_until, &ripper_id_kw},
00180 {modifier_until, &ripper_id_kw},
00181 {keyword_when, &ripper_id_kw},
00182 {keyword_while, &ripper_id_kw},
00183 {modifier_while, &ripper_id_kw},
00184 {keyword_yield, &ripper_id_kw},
00185 {keyword__FILE__, &ripper_id_kw},
00186 {keyword__LINE__, &ripper_id_kw},
00187 {keyword__ENCODING__, &ripper_id_kw},
00188 {keyword_BEGIN, &ripper_id_kw},
00189 {keyword_END, &ripper_id_kw},
00190 {keyword_do_LAMBDA, &ripper_id_kw},
00191 {tAMPER, &ripper_id_op},
00192 {tANDOP, &ripper_id_op},
00193 {tAREF, &ripper_id_op},
00194 {tASET, &ripper_id_op},
00195 {tASSOC, &ripper_id_op},
00196 {tBACK_REF, &ripper_id_backref},
00197 {tCHAR, &ripper_id_CHAR},
00198 {tCMP, &ripper_id_op},
00199 {tCOLON2, &ripper_id_op},
00200 {tCOLON3, &ripper_id_op},
00201 {tCONSTANT, &ripper_id_const},
00202 {tCVAR, &ripper_id_cvar},
00203 {tDOT2, &ripper_id_op},
00204 {tDOT3, &ripper_id_op},
00205 {tEQ, &ripper_id_op},
00206 {tEQQ, &ripper_id_op},
00207 {tFID, &ripper_id_ident},
00208 {tFLOAT, &ripper_id_float},
00209 {tGEQ, &ripper_id_op},
00210 {tGVAR, &ripper_id_gvar},
00211 {tIDENTIFIER, &ripper_id_ident},
00212 {tINTEGER, &ripper_id_int},
00213 {tIVAR, &ripper_id_ivar},
00214 {tLBRACE, &ripper_id_lbrace},
00215 {tLBRACE_ARG, &ripper_id_lbrace},
00216 {'{', &ripper_id_lbrace},
00217 {'}', &ripper_id_rbrace},
00218 {tLBRACK, &ripper_id_lbracket},
00219 {'[', &ripper_id_lbracket},
00220 {']', &ripper_id_rbracket},
00221 {tLEQ, &ripper_id_op},
00222 {tLPAREN, &ripper_id_lparen},
00223 {tLPAREN_ARG, &ripper_id_lparen},
00224 {'(', &ripper_id_lparen},
00225 {')', &ripper_id_rparen},
00226 {tLSHFT, &ripper_id_op},
00227 {tMATCH, &ripper_id_op},
00228 {tNEQ, &ripper_id_op},
00229 {tNMATCH, &ripper_id_op},
00230 {tNTH_REF, &ripper_id_backref},
00231 {tOP_ASGN, &ripper_id_op},
00232 {tOROP, &ripper_id_op},
00233 {tPOW, &ripper_id_op},
00234 {tQWORDS_BEG, &ripper_id_qwords_beg},
00235 {tQSYMBOLS_BEG, &ripper_id_qsymbols_beg},
00236 {tSYMBOLS_BEG, &ripper_id_symbols_beg},
00237 {tREGEXP_BEG, &ripper_id_regexp_beg},
00238 {tREGEXP_END, &ripper_id_regexp_end},
00239 {tRPAREN, &ripper_id_rparen},
00240 {tRSHFT, &ripper_id_op},
00241 {tSTAR, &ripper_id_op},
00242 {tDSTAR, &ripper_id_op},
00243 {tSTRING_BEG, &ripper_id_tstring_beg},
00244 {tSTRING_CONTENT, &ripper_id_tstring_content},
00245 {tSTRING_DBEG, &ripper_id_embexpr_beg},
00246 {tSTRING_DEND, &ripper_id_embexpr_end},
00247 {tSTRING_DVAR, &ripper_id_embvar},
00248 {tSTRING_END, &ripper_id_tstring_end},
00249 {tSYMBEG, &ripper_id_symbeg},
00250 {tUMINUS, &ripper_id_op},
00251 {tUMINUS_NUM, &ripper_id_op},
00252 {tUPLUS, &ripper_id_op},
00253 {tWORDS_BEG, &ripper_id_words_beg},
00254 {tXSTRING_BEG, &ripper_id_backtick},
00255 {tLABEL, &ripper_id_label},
00256 {tLAMBDA, &ripper_id_tlambda},
00257 {tLAMBEG, &ripper_id_tlambeg},
00258
00259
00260 {tIGNORED_NL, &ripper_id_ignored_nl},
00261 {tCOMMENT, &ripper_id_comment},
00262 {tEMBDOC_BEG, &ripper_id_embdoc_beg},
00263 {tEMBDOC, &ripper_id_embdoc},
00264 {tEMBDOC_END, &ripper_id_embdoc_end},
00265 {tSP, &ripper_id_sp},
00266 {tHEREDOC_BEG, &ripper_id_heredoc_beg},
00267 {tHEREDOC_END, &ripper_id_heredoc_end},
00268 {k__END__, &ripper_id___end__},
00269 {0, NULL}
00270 };
00271
00272 static ID
00273 ripper_token2eventid(int tok)
00274 {
00275 const struct token_assoc *a;
00276
00277 for (a = token_to_eventid; a->id != NULL; a++) {
00278 if (a->token == tok)
00279 return *a->id;
00280 }
00281 if (tok < 256) {
00282 return ripper_id_CHAR;
00283 }
00284 rb_raise(rb_eRuntimeError, "[Ripper FATAL] unknown token %d", tok);
00285
00286 UNREACHABLE;
00287 }
00288