From 72b785e07210c7419802caa3595fc03d84df2c3a Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 5 Nov 2015 04:04:00 +0000 Subject: id.def: token_ops * defs/id.def (token_ops): gather associations between IDs, operators, and parser tokens. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52458 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- template/id.c.tmpl | 16 ++++++++++++++++ template/id.h.tmpl | 48 +++++++++--------------------------------------- 2 files changed, 25 insertions(+), 39 deletions(-) (limited to 'template') diff --git a/template/id.c.tmpl b/template/id.c.tmpl index cac213a8fb..477a76bc26 100644 --- a/template/id.c.tmpl +++ b/template/id.c.tmpl @@ -13,7 +13,23 @@ <% defs = File.join(File.dirname(File.dirname(erb.filename)), "defs/id.def") ids = eval(File.read(defs), binding, defs) +ops = ids[:token_op].uniq {|id, op, token| token && op} %> +% ops.each do |_id, _op, token| +% next unless token +#define t<%=token%> RUBY_TOKEN(<%=token%>) +% end + +static const struct { + unsigned short token; + const char name[3], term; +} op_tbl[] = { +% ops.each do |_id, op, token| +% next unless token + {t<%=token%>, "<%=op%>"}, +% end +}; + static void Init_id(void) { diff --git a/template/id.h.tmpl b/template/id.h.tmpl index 5e7f117c24..0db35c1802 100644 --- a/template/id.h.tmpl +++ b/template/id.h.tmpl @@ -15,12 +15,6 @@ 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 tDOTQ -] - 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]/) @@ -57,43 +51,19 @@ enum ruby_id_types { #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%> +% index = op_id_offset +% ids[:token_op].each do |_id, _op, token| +% next unless token +#define RUBY_TOKEN_<%=token%> <%=index%> +% index += 1 % 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), - idDOTQ = RUBY_TOKEN(DOTQ), - tPRESERVED_ID_BEGIN = <%=op_id_offset + token_op_ids.size - 1%>, +% ids[:token_op].uniq {|_, op| op}.each do |id, op, token| + id<%=id%> = <%=token ? "RUBY_TOKEN(#{token})" : "'#{op}'"%>, +% end + tPRESERVED_ID_BEGIN = <%=index-1%>, % ids[:preserved].each do |token| id<%=token%>, % end -- cgit v1.2.3