diff options
Diffstat (limited to 'jni/ruby/template/id.h.tmpl')
-rw-r--r-- | jni/ruby/template/id.h.tmpl | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/jni/ruby/template/id.h.tmpl b/jni/ruby/template/id.h.tmpl new file mode 100644 index 0000000..1c645ca --- /dev/null +++ b/jni/ruby/template/id.h.tmpl @@ -0,0 +1,118 @@ +%# -*- c -*- +/* DO NOT EDIT THIS FILE DIRECTLY */ +/********************************************************************** + + id.h - + + $Author: nobu $ + 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_SCOPE_SHIFT)|ID_<%=type%>|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 */ |