aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-04 17:36:19 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-04 17:36:19 +0000
commit28ee4c296680e9131c6d7869d0fd523738af2b89 (patch)
tree86f96a97921bbdde51cb6e7f312c881eec766408
parent01380620bdbe1afe848e91fc953dc345a39a1188 (diff)
downloadruby-28ee4c296680e9131c6d7869d0fd523738af2b89.tar.gz
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
-rw-r--r--.gitignore2
-rw-r--r--ChangeLog4
-rw-r--r--common.mk9
-rw-r--r--defs/id.def50
-rw-r--r--id.c56
-rw-r--r--template/id.c.tmpl28
-rw-r--r--template/id.h.tmpl40
7 files changed, 94 insertions, 95 deletions
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 <nobu@ruby-lang.org>
+
+ * 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 <kosaki.motohiro@gmail.com>
* 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
+ <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
+]
+
+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, "<IFUNC>");
- REGISTER_SYMID(idCFUNC, "<CFUNC>");
- 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