1%# -*- c -*- 2/* DO NOT EDIT THIS FILE DIRECTLY */ 3/********************************************************************** 4 5 id.h - 6 7 $Author: nobu $ 8 created at: Sun Oct 19 21:12:51 2008 9 10 Copyright (C) 2007 Koichi Sasada 11 12**********************************************************************/ 13<% 14op_id_offset = 128 15 16defs = File.join(File.dirname(File.dirname(erb.filename)), "defs/id.def") 17ids = eval(File.read(defs), binding, defs) 18types = ids.keys.grep(/^[A-Z]/) 19%> 20#ifndef RUBY_ID_H 21#define RUBY_ID_H 22 23enum ruby_id_types { 24 RUBY_ID_STATIC_SYM = 0x01, 25 RUBY_ID_LOCAL = 0x00, 26 RUBY_ID_INSTANCE = (0x01<<1), 27 RUBY_ID_GLOBAL = (0x03<<1), 28 RUBY_ID_ATTRSET = (0x04<<1), 29 RUBY_ID_CONST = (0x05<<1), 30 RUBY_ID_CLASS = (0x06<<1), 31 RUBY_ID_JUNK = (0x07<<1), 32 RUBY_ID_INTERNAL = RUBY_ID_JUNK, 33 RUBY_ID_SCOPE_SHIFT = 4, 34 RUBY_ID_SCOPE_MASK = (~(~0U<<(RUBY_ID_SCOPE_SHIFT-1))<<1) 35}; 36 37#define ID_STATIC_SYM RUBY_ID_STATIC_SYM 38#define ID_SCOPE_SHIFT RUBY_ID_SCOPE_SHIFT 39#define ID_SCOPE_MASK RUBY_ID_SCOPE_MASK 40#define ID_LOCAL RUBY_ID_LOCAL 41#define ID_INSTANCE RUBY_ID_INSTANCE 42#define ID_GLOBAL RUBY_ID_GLOBAL 43#define ID_ATTRSET RUBY_ID_ATTRSET 44#define ID_CONST RUBY_ID_CONST 45#define ID_CLASS RUBY_ID_CLASS 46#define ID_JUNK RUBY_ID_JUNK 47#define ID_INTERNAL RUBY_ID_INTERNAL 48 49#define symIFUNC ID2SYM(idIFUNC) 50#define symCFUNC ID2SYM(idCFUNC) 51 52% index = op_id_offset 53% ids[:token_op].each do |_id, _op, token| 54% next unless token 55#define RUBY_TOKEN_<%=token%> <%=index%> 56% index += 1 57% end 58#define RUBY_TOKEN(t) RUBY_TOKEN_##t 59 60#define RUBY_TOKEN2ID_TYPE(tok, type) ((tok<<RUBY_ID_SCOPE_SHIFT)|type|RUBY_ID_STATIC_SYM) 61% types.each do |type| 62#define TOKEN2<%=type%>ID(tok) RUBY_TOKEN2ID_TYPE(tok, RUBY_ID_<%=type%>) 63% end 64 65enum ruby_method_ids { 66% ids[:token_op].uniq {|_, op| op}.each do |id, op, token| 67 id<%=id%> = <%=token ? "RUBY_TOKEN(#{token})" : "'#{op}'"%>, 68% end 69 tPRESERVED_ID_BEGIN = <%=index-1%>, 70% ids[:preserved].each do |token| 71 id<%=token%>, 72% end 73 tPRESERVED_ID_END, 74% prev = 'tPRESERVED_ID_END' 75% types.each do |type| 76% tokens = ids[type] 77 tTOKEN_<%=type%>_BEGIN = <%=prev%>-1, 78% tokens.each do |token| 79 t<%=token%>, 80% end 81% prev = "tTOKEN_#{type}_END" 82 <%=prev%>, 83% end 84 tNEXT_ID = <%=prev%>, 85% types.each do |type| 86% tokens = ids[type] 87#define DEFINE_<%=type%>ID_FROM_TOKEN(n) id##n = TOKEN2<%=type%>ID(t##n) 88% tokens or next 89% tokens.each do |token| 90 DEFINE_<%=type%>ID_FROM_TOKEN(<%=token%>), 91% end 92% end 93 tLAST_OP_ID = tPRESERVED_ID_END-1, 94 idLAST_OP_ID = tLAST_OP_ID >> ID_SCOPE_SHIFT 95}; 96 97#endif /* RUBY_ID_H */ 98