ripper/tools/generate.rb: shorten generated source

* ext/ripper/tools/generate.rb (generate_eventids1): shorten
  generated source.

* ext/ripper/tools/generate.rb (generate_eventids2): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-10-27 06:38:09 +00:00
Родитель d8e1bf2760
Коммит 92c61ca747
2 изменённых файлов: 23 добавлений и 11 удалений

Просмотреть файл

@ -68,15 +68,22 @@ end
def generate_eventids1(ids) def generate_eventids1(ids)
buf = "" buf = ""
buf << %Q[static struct {\n]
ids.each do |id, arity| ids.each do |id, arity|
buf << %Q[static ID ripper_id_#{id};\n] buf << %Q[ ID id_#{id};\n]
end
buf << %Q[} ripper_parser_ids;\n]
buf << %Q[\n]
ids.each do |id, arity|
buf << %Q[#define ripper_id_#{id} ripper_parser_ids.id_#{id}\n]
end end
buf << %Q[\n] buf << %Q[\n]
buf << %Q[static void\n] buf << %Q[static void\n]
buf << %Q[ripper_init_eventids1(void)\n] buf << %Q[ripper_init_eventids1(void)\n]
buf << %Q[{\n] buf << %Q[{\n]
buf << %Q[#define set_id1(name) ripper_id_##name = rb_intern_const("on_"#name)\n]
ids.each do |id, arity| ids.each do |id, arity|
buf << %Q[ ripper_id_#{id} = rb_intern_const("on_#{id}");\n] buf << %Q[ set_id1(#{id});\n]
end end
buf << %Q[}\n] buf << %Q[}\n]
buf << %Q[\n] buf << %Q[\n]
@ -84,11 +91,9 @@ def generate_eventids1(ids)
buf << %Q[ripper_init_eventids1_table(VALUE self)\n] buf << %Q[ripper_init_eventids1_table(VALUE self)\n]
buf << %Q[{\n] buf << %Q[{\n]
buf << %Q[ VALUE h = rb_hash_new();\n] buf << %Q[ VALUE h = rb_hash_new();\n]
buf << %Q[ ID id;\n]
buf << %Q[ rb_define_const(self, "PARSER_EVENT_TABLE", h);\n] buf << %Q[ rb_define_const(self, "PARSER_EVENT_TABLE", h);\n]
ids.each do |id, arity| ids.each do |id, arity|
buf << %Q[ id = rb_intern_const("#{id}");\n] buf << %Q[ rb_hash_aset(h, intern_sym("#{id}"), INT2FIX(#{arity}));\n]
buf << %Q[ rb_hash_aset(h, ID2SYM(id), INT2NUM(#{arity}));\n]
end end
buf << %Q[}\n] buf << %Q[}\n]
buf buf
@ -100,11 +105,9 @@ def generate_eventids2_table(ids)
buf << %Q[ripper_init_eventids2_table(VALUE self)\n] buf << %Q[ripper_init_eventids2_table(VALUE self)\n]
buf << %Q[{\n] buf << %Q[{\n]
buf << %Q[ VALUE h = rb_hash_new();\n] buf << %Q[ VALUE h = rb_hash_new();\n]
buf << %Q[ ID id;\n]
buf << %Q[ rb_define_const(self, "SCANNER_EVENT_TABLE", h);\n] buf << %Q[ rb_define_const(self, "SCANNER_EVENT_TABLE", h);\n]
ids.each do |id| ids.each do |id|
buf << %Q[ id = rb_intern_const("#{id}");\n] buf << %Q[ rb_hash_aset(h, intern_sym("#{id}"), INT2FIX(1));\n]
buf << %Q[ rb_hash_aset(h, ID2SYM(id), INT2NUM(1));\n]
end end
buf << %Q[}\n] buf << %Q[}\n]
buf buf
@ -135,9 +138,9 @@ def read_ids1_with_locations(path)
h = {} h = {}
File.open(path) {|f| File.open(path) {|f|
f.each do |line| f.each do |line|
next if /\A\#\s*define\s+s?dispatch/ =~ line next if /\A\#\s*define\s+dispatch/ =~ line
next if /ripper_dispatch/ =~ line next if /ripper_dispatch/ =~ line
line.scan(/dispatch(\d)\((\w+)/) do |arity, event| line.scan(/\bdispatch(\d)\((\w+)/) do |arity, event|
(h[event] ||= []).push [f.lineno, arity.to_i] (h[event] ||= []).push [f.lineno, arity.to_i]
end end
end end
@ -147,7 +150,7 @@ end
def read_ids2(path) def read_ids2(path)
File.open(path) {|f| File.open(path) {|f|
return f.read.scan(/ripper_id_(\w+)/).flatten.uniq.sort return f.read.scan(/ID\s+ripper_id_(\w+)/).flatten.uniq.sort
} }
end end

Просмотреть файл

@ -540,6 +540,8 @@ static int lvar_defined_gen(struct parser_params*, ID);
#ifdef RIPPER #ifdef RIPPER
#define RIPPER_VERSION "0.1.0" #define RIPPER_VERSION "0.1.0"
static inline VALUE intern_sym(const char *name);
#include "eventids1.c" #include "eventids1.c"
#include "eventids2.c" #include "eventids2.c"
@ -5131,6 +5133,13 @@ ripper_yylval_id(ID x)
#define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)) #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
static inline VALUE
intern_sym(const char *name)
{
ID id = rb_intern_const(name);
return ID2SYM(id);
}
static int static int
ripper_has_scan_event(struct parser_params *parser) ripper_has_scan_event(struct parser_params *parser)
{ {