mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
1bebb22ce1
method. Apply a patch proposed at [ruby-dev:46120] [ruby-trunk - Feature #6972] by Glass_saga (Masaki Matsushita). * compile.c (iseq_specialized_instruction), vm.c, vm_insnhelper.h: ditto. * id.c, template/id.h.tmpl: ditto. * test/ruby/test_optimization.rb: test for this changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37036 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
123 lines
2.5 KiB
C
123 lines
2.5 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
|
|
|
|
method_ids = %w[
|
|
Intern
|
|
MethodMissing
|
|
Length
|
|
Size
|
|
EmptyP
|
|
Gets
|
|
Succ
|
|
Each
|
|
Lambda
|
|
Send
|
|
__send__
|
|
Initialize
|
|
UScore
|
|
Bitblt
|
|
Answer
|
|
]
|
|
|
|
token_op_ids = %w[
|
|
tDOT2 tDOT3 tUPLUS tUMINUS tPOW tDSTAR tCMP tLSHFT tRSHFT
|
|
tLEQ tGEQ tEQ tEQQ tNEQ tMATCH tNMATCH tAREF tASET
|
|
tCOLON2 tCOLON3
|
|
]
|
|
|
|
preserved_ids = %w[
|
|
NULL
|
|
Respond_to
|
|
IFUNC
|
|
CFUNC
|
|
_core_set_method_alias
|
|
_core_set_variable_alias
|
|
_core_undef_method
|
|
_core_define_method
|
|
_core_define_singleton_method
|
|
_core_set_postexe
|
|
_core_hash_from_ary
|
|
_core_hash_merge_ary
|
|
_core_hash_merge_ptr
|
|
_core_hash_merge_kwd
|
|
]
|
|
%>
|
|
#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 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%>,
|
|
% preserved_ids.each do |token|
|
|
id<%=token%>,
|
|
% end
|
|
tPRESERVED_ID_END,
|
|
% method_ids.each do |token|
|
|
t<%=token%>,
|
|
% end
|
|
#define TOKEN2ID(n) id##n = ((t##n<<ID_SCOPE_SHIFT)|ID_LOCAL)
|
|
% method_ids.each do |token|
|
|
TOKEN2ID(<%=token%>),
|
|
% end
|
|
tLAST_OP_ID = tPRESERVED_ID_END-1,
|
|
idLAST_OP_ID = tLAST_OP_ID >> ID_SCOPE_SHIFT
|
|
};
|
|
|
|
#endif /* RUBY_ID_H */
|