Ruby  2.0.0p247(2013-06-27revision41674)
ext/ripper/eventids2.c
Go to the documentation of this file.
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     /* ripper specific tokens */
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