зеркало из https://github.com/github/ruby.git
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:
Родитель
d8e1bf2760
Коммит
92c61ca747
|
@ -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
|
||||||
|
|
||||||
|
|
9
parse.y
9
parse.y
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче