%# -*- c -*- /* DO NOT EDIT THIS FILE DIRECTLY */ /********************************************************************** id.h - $Author$ created at: Sun Oct 19 21:12:51 2008 Copyright (C) 2007 Koichi Sasada **********************************************************************/ <% require 'optparse' op_id_offset = 128 token_op_ids = %w[ tDOT2 tDOT3 tUPLUS tUMINUS tPOW tDSTAR tCMP tLSHFT tRSHFT tLEQ tGEQ tEQ tEQQ tNEQ tMATCH tNMATCH tAREF tASET tCOLON2 tCOLON3 tANDOP tOROP ] defs = File.join(File.dirname(File.dirname(erb.filename)), "defs/id.def") ids = eval(File.read(defs), binding, defs) types = ids.keys.grep(/^[A-Z]/) %> #ifndef RUBY_ID_H #define RUBY_ID_H enum ruby_id_types { RUBY_ID_STATIC_SYM = 0x01, RUBY_ID_LOCAL = 0x00, RUBY_ID_INSTANCE = (0x01<<1), RUBY_ID_GLOBAL = (0x03<<1), RUBY_ID_ATTRSET = (0x04<<1), RUBY_ID_CONST = (0x05<<1), RUBY_ID_CLASS = (0x06<<1), RUBY_ID_JUNK = (0x07<<1), RUBY_ID_INTERNAL = RUBY_ID_JUNK, RUBY_ID_SCOPE_SHIFT = 4, RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1) }; #define ID_STATIC_SYM RUBY_ID_STATIC_SYM #define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT #define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK #define ID_LOCAL RUBY_ID_LOCAL #define ID_INSTANCE RUBY_ID_INSTANCE #define ID_GLOBAL RUBY_ID_GLOBAL #define ID_ATTRSET RUBY_ID_ATTRSET #define ID_CONST RUBY_ID_CONST #define ID_CLASS RUBY_ID_CLASS #define ID_JUNK RUBY_ID_JUNK #define ID_INTERNAL RUBY_ID_INTERNAL #define ID2ATTRSET(id) (((id)&~ID_SCOPE_MASK)|ID_ATTRSET) #define symIFUNC ID2SYM(idIFUNC) #define symCFUNC ID2SYM(idCFUNC) % token_op_ids.each_with_index do |token, index| #define RUBY_TOKEN_<%=token[/\At(.+)\z/, 1]%> <%=op_id_offset + index%> % end #define RUBY_TOKEN(t) RUBY_TOKEN_##t enum ruby_method_ids { idDot2 = RUBY_TOKEN(DOT2), idDot3 = RUBY_TOKEN(DOT3), idUPlus = RUBY_TOKEN(UPLUS), idUMinus = RUBY_TOKEN(UMINUS), idPow = RUBY_TOKEN(POW), idCmp = RUBY_TOKEN(CMP), idPLUS = '+', idMINUS = '-', idMULT = '*', idDIV = '/', idMOD = '%', idLT = '<', idLTLT = RUBY_TOKEN(LSHFT), idLE = RUBY_TOKEN(LEQ), idGT = '>', idGTGT = RUBY_TOKEN(RSHFT), idGE = RUBY_TOKEN(GEQ), idEq = RUBY_TOKEN(EQ), idEqq = RUBY_TOKEN(EQQ), idNeq = RUBY_TOKEN(NEQ), idNot = '!', idBackquote = '`', idEqTilde = RUBY_TOKEN(MATCH), idNeqTilde = RUBY_TOKEN(NMATCH), idAREF = RUBY_TOKEN(AREF), idASET = RUBY_TOKEN(ASET), idCOLON2 = RUBY_TOKEN(COLON2), idANDOP = RUBY_TOKEN(ANDOP), idOROP = RUBY_TOKEN(OROP), tPRESERVED_ID_BEGIN = <%=op_id_offset + token_op_ids.size - 1%>, % ids[:preserved].each do |token| id<%=token%>, % end tPRESERVED_ID_END, % ids.values_at(*types).flatten.each do |token| t<%=token%>, % end tNEXT_ID, % types.each do |type| % types = ids[type] or next % types.empty? and next #define TOKEN2<%=type%>ID(n) id##n = ((t##n<|ID_STATIC_SYM) % types.each do |token| TOKEN2<%=type%>ID(<%=token%>), % end % end tLAST_OP_ID = tPRESERVED_ID_END-1, idLAST_OP_ID = tLAST_OP_ID >> ID_SCOPE_SHIFT }; #endif /* RUBY_ID_H */