mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* template/id.h.tmpl (ID2ATTRSET): compile time constant macro for ID_ATTRSET. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
%#  -*- 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
 | 
						|
]
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
#define ID_SCOPE_SHIFT 3
 | 
						|
#define ID_SCOPE_MASK 0x07
 | 
						|
#define ID_LOCAL      0x00
 | 
						|
#define ID_INSTANCE   0x01
 | 
						|
#define ID_GLOBAL     0x03
 | 
						|
#define ID_ATTRSET    0x04
 | 
						|
#define ID_CONST      0x05
 | 
						|
#define ID_CLASS      0x06
 | 
						|
#define ID_JUNK       0x07
 | 
						|
#define ID_INTERNAL   ID_JUNK
 | 
						|
 | 
						|
#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 = '>',
 | 
						|
    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),
 | 
						|
    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
 | 
						|
% 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%>)
 | 
						|
%   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 */
 |