From 28ee4c296680e9131c6d7869d0fd523738af2b89 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 4 Dec 2012 17:36:19 +0000 Subject: [PATCH] id.c: generate * common.mk, defs/id.def, template/id.c.tmpl: generate id.c as well as id.h. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- .gitignore | 2 +- ChangeLog | 4 ++++ common.mk | 9 ++++++-- defs/id.def | 50 +++++++++++++++++++++++++++++++++++++++++ id.c | 56 ---------------------------------------------- template/id.c.tmpl | 28 +++++++++++++++++++++++ template/id.h.tmpl | 40 ++++----------------------------- 7 files changed, 94 insertions(+), 95 deletions(-) create mode 100644 defs/id.def delete mode 100644 id.c create mode 100644 template/id.c.tmpl diff --git a/.gitignore b/.gitignore index e872670e80..5808bf1082 100644 --- a/.gitignore +++ b/.gitignore @@ -56,7 +56,7 @@ y.tab.c /encdb.h /exts.mk /goruby -/id.h +/id.[ch] /largefile.h /lex.c /libruby*.* diff --git a/ChangeLog b/ChangeLog index 3137a4b388..99d52db61e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Dec 5 02:36:10 2012 Nobuyoshi Nakada + + * common.mk, defs/id.def, template/id.c.tmpl: generate id.c as well as id.h. + Wed Dec 5 00:56:21 2012 KOSAKI Motohiro * thread.c (rb_mutex_owned_p): new method that return current diff --git a/common.mk b/common.mk index 992c90b1a6..b552ae7f3c 100644 --- a/common.mk +++ b/common.mk @@ -841,7 +841,7 @@ INSNS2VMOPT = --srcdir="$(srcdir)" {$(VPATH)}vm.inc: $(srcdir)/template/vm.inc.tmpl -srcs: {$(VPATH)}parse.c {$(VPATH)}lex.c {$(VPATH)}newline.c srcs-ext srcs-enc +srcs: {$(VPATH)}parse.c {$(VPATH)}lex.c {$(VPATH)}newline.c {$(VPATH)}id.c srcs-ext srcs-enc EXT_SRCS = $(srcdir)/ext/ripper/ripper.c $(srcdir)/ext/json/parser/parser.c @@ -857,7 +857,12 @@ incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}encdb.h {$(VPATH)}transdb.h {$( insns: $(INSNS) -id.h: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.h.tmpl +id.h: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.h.tmpl $(srcdir)/defs/id.def + $(ECHO) generating $@ + $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb --output=$@ \ + $(srcdir)/template/$@.tmpl + +id.c: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.c.tmpl $(srcdir)/defs/id.def $(ECHO) generating $@ $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb --output=$@ \ $(srcdir)/template/$@.tmpl diff --git a/defs/id.def b/defs/id.def new file mode 100644 index 0000000000..0c47bd7804 --- /dev/null +++ b/defs/id.def @@ -0,0 +1,50 @@ +# -*- ruby -*- +predefined = %[\ + intern + method_missing MethodMissing + length + size + gets + succ + each + lambda + send + __send__ + initialize + initialize_copy + initialize_clone + initialize_dup + _ UScore + "/*NULL*/" NULL + empty? + respond_to? Respond_to + respond_to_missing? Respond_to_missing + + + 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 +] + +predefined_ids = {} +preserved_ids = [] +attr_ids = [] +predefined.each_line do |line| + next if /^#/ =~ line or (name, token = line.split; !name) + token ||= name + if /#/ =~ token + token = "_#{token.gsub(/\W+/, '_')}" + else + token = token.sub(/\?/, 'P').sub(/\A[a-z]/) {$&.upcase} + token.gsub!(/\W+/, "") + end + (/\A(?!\d)\w+\z/ =~ name ? attr_ids : preserved_ids) << token + predefined_ids[token] = name +end diff --git a/id.c b/id.c deleted file mode 100644 index b6793de3b9..0000000000 --- a/id.c +++ /dev/null @@ -1,56 +0,0 @@ -/********************************************************************** - - id.c - - - $Author$ - created at: Thu Jul 12 04:37:51 2007 - - Copyright (C) 2004-2007 Koichi Sasada - -**********************************************************************/ - -#include "ruby/ruby.h" - -#include "id.h" - -static void -Init_id(void) -{ -#undef rb_intern -#define rb_intern(str) rb_intern_const(str) - rb_encoding *enc = rb_usascii_encoding(); - - REGISTER_SYMID(idNULL, ""); - REGISTER_SYMID(idIFUNC, ""); - REGISTER_SYMID(idCFUNC, ""); - REGISTER_SYMID(idRespond_to, "respond_to?"); - REGISTER_SYMID(idRespond_to_missing, "respond_to_missing?"); - - REGISTER_SYMID(id_core_set_method_alias, "core#set_method_alias"); - REGISTER_SYMID(id_core_set_variable_alias, "core#set_variable_alias"); - REGISTER_SYMID(id_core_undef_method, "core#undef_method"); - REGISTER_SYMID(id_core_define_method, "core#define_method"); - REGISTER_SYMID(id_core_define_singleton_method, "core#define_singleton_method"); - REGISTER_SYMID(id_core_set_postexe, "core#set_postexe"); - REGISTER_SYMID(id_core_hash_from_ary, "core#hash_from_ary"); - REGISTER_SYMID(id_core_hash_merge_ary, "core#hash_merge_ary"); - REGISTER_SYMID(id_core_hash_merge_ptr, "core#hash_merge_ptr"); - REGISTER_SYMID(id_core_hash_merge_kwd, "core#hash_merge_kwd"); - - REGISTER_SYMID(idEach, "each"); - REGISTER_SYMID(idLength, "length"); - REGISTER_SYMID(idSize, "size"); - REGISTER_SYMID(idEmptyP, "empty?"); - REGISTER_SYMID(idLambda, "lambda"); - REGISTER_SYMID(idIntern, "intern"); - REGISTER_SYMID(idGets, "gets"); - REGISTER_SYMID(idSucc, "succ"); - REGISTER_SYMID(idMethodMissing, "method_missing"); - REGISTER_SYMID(idSend, "send"); - REGISTER_SYMID(id__send__, "__send__"); - REGISTER_SYMID(idInitialize, "initialize"); - REGISTER_SYMID(idInitialize_copy, "initialize_copy"); - REGISTER_SYMID(idInitialize_clone, "initialize_clone"); - REGISTER_SYMID(idInitialize_dup, "initialize_dup"); - REGISTER_SYMID(idUScore, "_"); -} diff --git a/template/id.c.tmpl b/template/id.c.tmpl new file mode 100644 index 0000000000..4f54f8b4a0 --- /dev/null +++ b/template/id.c.tmpl @@ -0,0 +1,28 @@ +%# -*- c -*- +/* DO NOT EDIT THIS FILE DIRECTLY */ +/********************************************************************** + + id.c - + + $Author$ + created at: Wed Dec 5 02:36:10 2012 + + Copyright (C) 2004-2007 Koichi Sasada + +**********************************************************************/ +<% +predefined_ids = nil +defs = File.join(File.dirname(erb.filename), "../defs/id.def") +eval(File.read(defs), binding, defs) +%> +static void +Init_id(void) +{ +#undef rb_intern +#define rb_intern(str) rb_intern_const(str) + rb_encoding *enc = rb_usascii_encoding(); + +% predefined_ids.each_pair do |token, name| + REGISTER_SYMID(id<%=token%>, "<%=name%>"); +% end +} diff --git a/template/id.h.tmpl b/template/id.h.tmpl index fdbcf812e0..b918bb8953 100644 --- a/template/id.h.tmpl +++ b/template/id.h.tmpl @@ -15,48 +15,16 @@ require 'optparse' op_id_offset = 128 -attr_ids = %w[ - Intern - MethodMissing - Length - Size - Gets - Succ - Each - Lambda - Send - __send__ - Initialize - Initialize_copy - Initialize_clone - Initialize_dup - UScore -] - 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 - EmptyP - Respond_to - Respond_to_missing - 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 -] +preserved_ids = nil +attr_ids = nil +defs = File.join(File.dirname(erb.filename), "../defs/id.def") +eval(File.read(defs), binding, defs) %> #ifndef RUBY_ID_H #define RUBY_ID_H