[前][次][番号順一覧][スレッド一覧]

ruby-changes:8050

From: yugui <ko1@a...>
Date: Fri, 26 Sep 2008 17:19:07 +0900 (JST)
Subject: [ruby-changes:8050] Ruby:r19575 (trunk): * error.c (Init_syserr): moved to the template.

yugui	2008-09-26 17:18:49 +0900 (Fri, 26 Sep 2008)

  New Revision: 19575

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19575

  Log:
    * error.c (Init_syserr): moved to the template.
      (errno_missing): removed. fixed [ruby-dev:35958].
    
    * defs/knwon_errors.def: added. extracted from Init_syserr.
    
    * templates/known_errors.inc.tmpl: added. Template for Init_syserr.
      c.f. [ruby-dev:35958].
    
    * tools/generic_erb.rb: added. general purpose mapper which maps
      data+template into source code.
    
    * common.mk (error.$(OBJEXT), incs, known_errors.inc):
      Fixed dependencies.

  Added directories:
    trunk/defs/
  Added files:
    trunk/defs/known_errors.def
    trunk/template/known_errors.inc.tmpl
    trunk/tool/generic_erb.rb
  Modified files:
    trunk/ChangeLog
    trunk/common.mk
    trunk/error.c

Index: defs/known_errors.def
===================================================================
--- defs/known_errors.def	(revision 0)
+++ defs/known_errors.def	(revision 19575)
@@ -0,0 +1,122 @@
+EPERM
+ENOENT
+ESRCH
+EINTR
+EIO
+ENXIO
+E2BIG
+ENOEXEC
+EBADF
+ECHILD
+EAGAIN
+ENOMEM
+EACCES
+EFAULT
+ENOTBLK
+EBUSY
+EEXIST
+EXDEV
+ENODEV
+ENOTDIR
+EISDIR
+EINVAL
+ENFILE
+EMFILE
+ENOTTY
+ETXTBSY
+EFBIG
+ENOSPC
+ESPIPE
+EROFS
+EMLINK
+EPIPE
+EDOM
+ERANGE
+EDEADLK
+ENAMETOOLONG
+ENOLCK
+ENOSYS
+ENOTEMPTY
+ELOOP
+EWOULDBLOCK
+ENOMSG
+EIDRM
+ECHRNG
+EL2NSYNC
+EL3HLT
+EL3RST
+ELNRNG
+EUNATCH
+ENOCSI
+EL2HLT
+EBADE
+EBADR
+EXFULL
+ENOANO
+EBADRQC
+EBADSLT
+EDEADLOCK
+EBFONT
+ENOSTR
+ENODATA
+ETIME
+ENOSR
+ENONET
+ENOPKG
+EREMOTE
+ENOLINK
+EADV
+ESRMNT
+ECOMM
+EPROTO
+EMULTIHOP
+EDOTDOT
+EBADMSG
+EOVERFLOW
+ENOTUNIQ
+EBADFD
+EREMCHG
+ELIBACC
+ELIBBAD
+ELIBSCN
+ELIBMAX
+ELIBEXEC
+EILSEQ
+ERESTART
+ESTRPIPE
+EUSERS
+ENOTSOCK
+EDESTADDRREQ
+EMSGSIZE
+EPROTOTYPE
+ENOPROTOOPT
+EPROTONOSUPPORT
+ESOCKTNOSUPPORT
+EOPNOTSUPP
+EPFNOSUPPORT
+EAFNOSUPPORT
+EADDRINUSE
+EADDRNOTAVAIL
+ENETDOWN
+ENETUNREACH
+ENETRESET
+ECONNABORTED
+ECONNRESET
+ENOBUFS
+EISCONN
+ENOTCONN
+ESHUTDOWN
+ETOOMANYREFS
+ETIMEDOUT
+ECONNREFUSED
+EHOSTDOWN
+EHOSTUNREACH
+EALREADY
+EINPROGRESS
+ESTALE
+EUCLEAN
+ENOTNAM
+ENAVAIL
+EISNAM
+EREMOTEIO
+EDQUOT
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19574)
+++ ChangeLog	(revision 19575)
@@ -1,3 +1,19 @@
+Fri Sep 26 17:07:04 2008  Yuki Sonoda (Yugui)  <yugui@y...>
+
+	* error.c (Init_syserr): moved to the template.
+	  (errno_missing): removed. fixed [ruby-dev:35958].
+
+	* defs/knwon_errors.def: added. extracted from Init_syserr.
+
+	* templates/known_errors.inc.tmpl: added. Template for Init_syserr.
+	  c.f. [ruby-dev:35958].
+
+	* tools/generic_erb.rb: added. general purpose mapper which maps
+	  data+template into source code.
+
+	* common.mk (error.$(OBJEXT), incs, known_errors.inc):
+	  Fixed dependencies.
+
 Fri Sep 26 17:02:04 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* thread.c (thlist_signal): clears the woken thread if nothing woke.
Index: common.mk
===================================================================
--- common.mk	(revision 19574)
+++ common.mk	(revision 19575)
@@ -462,7 +462,7 @@
 enum.$(OBJEXT): {$(VPATH)}enum.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h \
   {$(VPATH)}util.h
 enumerator.$(OBJEXT): {$(VPATH)}enumerator.c $(RUBY_H_INCLUDES)
-error.$(OBJEXT): {$(VPATH)}error.c $(RUBY_H_INCLUDES) \
+error.$(OBJEXT): {$(VPATH)}error.c {$(VPATH)}known_errors.inc $(RUBY_H_INCLUDES) \
   $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}parse.y
 eval.$(OBJEXT): {$(VPATH)}eval.c {$(VPATH)}eval_intern.h \
   $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}eval_error.c \
@@ -629,7 +629,7 @@
 srcs-enc: $(ENC_MK)
 	$(MAKE) -f $(ENC_MK) RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(MFLAGS) srcs
 
-incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}encdb.h {$(VPATH)}transdb.h $(srcdir)/revision.h
+incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}encdb.h {$(VPATH)}transdb.h {$(VPATH)}known_errors.inc $(srcdir)/revision.h
 
 insns: $(INSNS)
 
@@ -644,6 +644,9 @@
 	$(MINIRUBY) $(srcdir)/enc/trans/make_transdb.rb $@.new $(srcdir)/enc/trans enc/trans
 	$(IFCHANGE) "$@" "$@.new"
 
+known_errors.inc: $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
+	$(BASERUBY) $(srcdir)/tool/generic_erb.rb $+ > $@
+
 miniprelude.c: $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb
 	$(BASERUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb $@
 
Index: error.c
===================================================================
--- error.c	(revision 19574)
+++ error.c	(revision 19575)
@@ -984,18 +984,6 @@
 }
 
 /*
- * call-seq:
- *   Errno.const_missing   => SystemCallError
- *
- * Returns default SystemCallError class.
- */
-static VALUE
-errno_missing(VALUE self, VALUE id)
-{
-    return rb_eNOERROR;
-}
-
-/*
  *  Descendants of class <code>Exception</code> are used to communicate
  *  between <code>raise</code> methods and <code>rescue</code>
  *  statements in <code>begin/end</code> blocks. <code>Exception</code>
@@ -1067,7 +1055,6 @@
     rb_define_singleton_method(rb_eSystemCallError, "===", syserr_eqq, 1);
 
     rb_mErrno = rb_define_module("Errno");
-    rb_define_singleton_method(rb_mErrno, "const_missing", errno_missing, 1);
 
     rb_define_global_function("warn", rb_warn_m, 1);
 }
@@ -1170,377 +1157,7 @@
     if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));
 }
 
-void
-Init_syserr(void)
-{
-#ifdef EPERM
-    set_syserr(EPERM, "EPERM");
-#endif
-#ifdef ENOENT
-    set_syserr(ENOENT, "ENOENT");
-#endif
-#ifdef ESRCH
-    set_syserr(ESRCH, "ESRCH");
-#endif
-#ifdef EINTR
-    set_syserr(EINTR, "EINTR");
-#endif
-#ifdef EIO
-    set_syserr(EIO, "EIO");
-#endif
-#ifdef ENXIO
-    set_syserr(ENXIO, "ENXIO");
-#endif
-#ifdef E2BIG
-    set_syserr(E2BIG, "E2BIG");
-#endif
-#ifdef ENOEXEC
-    set_syserr(ENOEXEC, "ENOEXEC");
-#endif
-#ifdef EBADF
-    set_syserr(EBADF, "EBADF");
-#endif
-#ifdef ECHILD
-    set_syserr(ECHILD, "ECHILD");
-#endif
-#ifdef EAGAIN
-    set_syserr(EAGAIN, "EAGAIN");
-#endif
-#ifdef ENOMEM
-    set_syserr(ENOMEM, "ENOMEM");
-#endif
-#ifdef EACCES
-    set_syserr(EACCES, "EACCES");
-#endif
-#ifdef EFAULT
-    set_syserr(EFAULT, "EFAULT");
-#endif
-#ifdef ENOTBLK
-    set_syserr(ENOTBLK, "ENOTBLK");
-#endif
-#ifdef EBUSY
-    set_syserr(EBUSY, "EBUSY");
-#endif
-#ifdef EEXIST
-    set_syserr(EEXIST, "EEXIST");
-#endif
-#ifdef EXDEV
-    set_syserr(EXDEV, "EXDEV");
-#endif
-#ifdef ENODEV
-    set_syserr(ENODEV, "ENODEV");
-#endif
-#ifdef ENOTDIR
-    set_syserr(ENOTDIR, "ENOTDIR");
-#endif
-#ifdef EISDIR
-    set_syserr(EISDIR, "EISDIR");
-#endif
-#ifdef EINVAL
-    set_syserr(EINVAL, "EINVAL");
-#endif
-#ifdef ENFILE
-    set_syserr(ENFILE, "ENFILE");
-#endif
-#ifdef EMFILE
-    set_syserr(EMFILE, "EMFILE");
-#endif
-#ifdef ENOTTY
-    set_syserr(ENOTTY, "ENOTTY");
-#endif
-#ifdef ETXTBSY
-    set_syserr(ETXTBSY, "ETXTBSY");
-#endif
-#ifdef EFBIG
-    set_syserr(EFBIG, "EFBIG");
-#endif
-#ifdef ENOSPC
-    set_syserr(ENOSPC, "ENOSPC");
-#endif
-#ifdef ESPIPE
-    set_syserr(ESPIPE, "ESPIPE");
-#endif
-#ifdef EROFS
-    set_syserr(EROFS, "EROFS");
-#endif
-#ifdef EMLINK
-    set_syserr(EMLINK, "EMLINK");
-#endif
-#ifdef EPIPE
-    set_syserr(EPIPE, "EPIPE");
-#endif
-#ifdef EDOM
-    set_syserr(EDOM, "EDOM");
-#endif
-#ifdef ERANGE
-    set_syserr(ERANGE, "ERANGE");
-#endif
-#ifdef EDEADLK
-    set_syserr(EDEADLK, "EDEADLK");
-#endif
-#ifdef ENAMETOOLONG
-    set_syserr(ENAMETOOLONG, "ENAMETOOLONG");
-#endif
-#ifdef ENOLCK
-    set_syserr(ENOLCK, "ENOLCK");
-#endif
-#ifdef ENOSYS
-    set_syserr(ENOSYS, "ENOSYS");
-#endif
-#ifdef ENOTEMPTY
-    set_syserr(ENOTEMPTY, "ENOTEMPTY");
-#endif
-#ifdef ELOOP
-    set_syserr(ELOOP, "ELOOP");
-#endif
-#ifdef EWOULDBLOCK
-    set_syserr(EWOULDBLOCK, "EWOULDBLOCK");
-#endif
-#ifdef ENOMSG
-    set_syserr(ENOMSG, "ENOMSG");
-#endif
-#ifdef EIDRM
-    set_syserr(EIDRM, "EIDRM");
-#endif
-#ifdef ECHRNG
-    set_syserr(ECHRNG, "ECHRNG");
-#endif
-#ifdef EL2NSYNC
-    set_syserr(EL2NSYNC, "EL2NSYNC");
-#endif
-#ifdef EL3HLT
-    set_syserr(EL3HLT, "EL3HLT");
-#endif
-#ifdef EL3RST
-    set_syserr(EL3RST, "EL3RST");
-#endif
-#ifdef ELNRNG
-    set_syserr(ELNRNG, "ELNRNG");
-#endif
-#ifdef EUNATCH
-    set_syserr(EUNATCH, "EUNATCH");
-#endif
-#ifdef ENOCSI
-    set_syserr(ENOCSI, "ENOCSI");
-#endif
-#ifdef EL2HLT
-    set_syserr(EL2HLT, "EL2HLT");
-#endif
-#ifdef EBADE
-    set_syserr(EBADE, "EBADE");
-#endif
-#ifdef EBADR
-    set_syserr(EBADR, "EBADR");
-#endif
-#ifdef EXFULL
-    set_syserr(EXFULL, "EXFULL");
-#endif
-#ifdef ENOANO
-    set_syserr(ENOANO, "ENOANO");
-#endif
-#ifdef EBADRQC
-    set_syserr(EBADRQC, "EBADRQC");
-#endif
-#ifdef EBADSLT
-    set_syserr(EBADSLT, "EBADSLT");
-#endif
-#ifdef EDEADLOCK
-    set_syserr(EDEADLOCK, "EDEADLOCK");
-#endif
-#ifdef EBFONT
-    set_syserr(EBFONT, "EBFONT");
-#endif
-#ifdef ENOSTR
-    set_syserr(ENOSTR, "ENOSTR");
-#endif
-#ifdef ENODATA
-    set_syserr(ENODATA, "ENODATA");
-#endif
-#ifdef ETIME
-    set_syserr(ETIME, "ETIME");
-#endif
-#ifdef ENOSR
-    set_syserr(ENOSR, "ENOSR");
-#endif
-#ifdef ENONET
-    set_syserr(ENONET, "ENONET");
-#endif
-#ifdef ENOPKG
-    set_syserr(ENOPKG, "ENOPKG");
-#endif
-#ifdef EREMOTE
-    set_syserr(EREMOTE, "EREMOTE");
-#endif
-#ifdef ENOLINK
-    set_syserr(ENOLINK, "ENOLINK");
-#endif
-#ifdef EADV
-    set_syserr(EADV, "EADV");
-#endif
-#ifdef ESRMNT
-    set_syserr(ESRMNT, "ESRMNT");
-#endif
-#ifdef ECOMM
-    set_syserr(ECOMM, "ECOMM");
-#endif
-#ifdef EPROTO
-    set_syserr(EPROTO, "EPROTO");
-#endif
-#ifdef EMULTIHOP
-    set_syserr(EMULTIHOP, "EMULTIHOP");
-#endif
-#ifdef EDOTDOT
-    set_syserr(EDOTDOT, "EDOTDOT");
-#endif
-#ifdef EBADMSG
-    set_syserr(EBADMSG, "EBADMSG");
-#endif
-#ifdef EOVERFLOW
-    set_syserr(EOVERFLOW, "EOVERFLOW");
-#endif
-#ifdef ENOTUNIQ
-    set_syserr(ENOTUNIQ, "ENOTUNIQ");
-#endif
-#ifdef EBADFD
-    set_syserr(EBADFD, "EBADFD");
-#endif
-#ifdef EREMCHG
-    set_syserr(EREMCHG, "EREMCHG");
-#endif
-#ifdef ELIBACC
-    set_syserr(ELIBACC, "ELIBACC");
-#endif
-#ifdef ELIBBAD
-    set_syserr(ELIBBAD, "ELIBBAD");
-#endif
-#ifdef ELIBSCN
-    set_syserr(ELIBSCN, "ELIBSCN");
-#endif
-#ifdef ELIBMAX
-    set_syserr(ELIBMAX, "ELIBMAX");
-#endif
-#ifdef ELIBEXEC
-    set_syserr(ELIBEXEC, "ELIBEXEC");
-#endif
-#ifdef EILSEQ
-    set_syserr(EILSEQ, "EILSEQ");
-#endif
-#ifdef ERESTART
-    set_syserr(ERESTART, "ERESTART");
-#endif
-#ifdef ESTRPIPE
-    set_syserr(ESTRPIPE, "ESTRPIPE");
-#endif
-#ifdef EUSERS
-    set_syserr(EUSERS, "EUSERS");
-#endif
-#ifdef ENOTSOCK
-    set_syserr(ENOTSOCK, "ENOTSOCK");
-#endif
-#ifdef EDESTADDRREQ
-    set_syserr(EDESTADDRREQ, "EDESTADDRREQ");
-#endif
-#ifdef EMSGSIZE
-    set_syserr(EMSGSIZE, "EMSGSIZE");
-#endif
-#ifdef EPROTOTYPE
-    set_syserr(EPROTOTYPE, "EPROTOTYPE");
-#endif
-#ifdef ENOPROTOOPT
-    set_syserr(ENOPROTOOPT, "ENOPROTOOPT");
-#endif
-#ifdef EPROTONOSUPPORT
-    set_syserr(EPROTONOSUPPORT, "EPROTONOSUPPORT");
-#endif
-#ifdef ESOCKTNOSUPPORT
-    set_syserr(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT");
-#endif
-#ifdef EOPNOTSUPP
-    set_syserr(EOPNOTSUPP, "EOPNOTSUPP");
-#endif
-#ifdef EPFNOSUPPORT
-    set_syserr(EPFNOSUPPORT, "EPFNOSUPPORT");
-#endif
-#ifdef EAFNOSUPPORT
-    set_syserr(EAFNOSUPPORT, "EAFNOSUPPORT");
-#endif
-#ifdef EADDRINUSE
-    set_syserr(EADDRINUSE, "EADDRINUSE");
-#endif
-#ifdef EADDRNOTAVAIL
-    set_syserr(EADDRNOTAVAIL, "EADDRNOTAVAIL");
-#endif
-#ifdef ENETDOWN
-    set_syserr(ENETDOWN, "ENETDOWN");
-#endif
-#ifdef ENETUNREACH
-    set_syserr(ENETUNREACH, "ENETUNREACH");
-#endif
-#ifdef ENETRESET
-    set_syserr(ENETRESET, "ENETRESET");
-#endif
-#ifdef ECONNABORTED
-    set_syserr(ECONNABORTED, "ECONNABORTED");
-#endif
-#ifdef ECONNRESET
-    set_syserr(ECONNRESET, "ECONNRESET");
-#endif
-#ifdef ENOBUFS
-    set_syserr(ENOBUFS, "ENOBUFS");
-#endif
-#ifdef EISCONN
-    set_syserr(EISCONN, "EISCONN");
-#endif
-#ifdef ENOTCONN
-    set_syserr(ENOTCONN, "ENOTCONN");
-#endif
-#ifdef ESHUTDOWN
-    set_syserr(ESHUTDOWN, "ESHUTDOWN");
-#endif
-#ifdef ETOOMANYREFS
-    set_syserr(ETOOMANYREFS, "ETOOMANYREFS");
-#endif
-#ifdef ETIMEDOUT
-    set_syserr(ETIMEDOUT, "ETIMEDOUT");
-#endif
-#ifdef ECONNREFUSED
-    set_syserr(ECONNREFUSED, "ECONNREFUSED");
-#endif
-#ifdef EHOSTDOWN
-    set_syserr(EHOSTDOWN, "EHOSTDOWN");
-#endif
-#ifdef EHOSTUNREACH
-    set_syserr(EHOSTUNREACH, "EHOSTUNREACH");
-#endif
-#ifdef EALREADY
-    set_syserr(EALREADY, "EALREADY");
-#endif
-#ifdef EINPROGRESS
-    set_syserr(EINPROGRESS, "EINPROGRESS");
-#endif
-#ifdef ESTALE
-    set_syserr(ESTALE, "ESTALE");
-#endif
-#ifdef EUCLEAN
-    set_syserr(EUCLEAN, "EUCLEAN");
-#endif
-#ifdef ENOTNAM
-    set_syserr(ENOTNAM, "ENOTNAM");
-#endif
-#ifdef ENAVAIL
-    set_syserr(ENAVAIL, "ENAVAIL");
-#endif
-#ifdef EISNAM
-    set_syserr(EISNAM, "EISNAM");
-#endif
-#ifdef EREMOTEIO
-    set_syserr(EREMOTEIO, "EREMOTEIO");
-#endif
-#ifdef EDQUOT
-    set_syserr(EDQUOT, "EDQUOT");
-#endif
-    rb_eNOERROR = set_syserr(0, "NOERROR");
-}
+#include "known_errors.inc"
 
 static void
 err_append(const char *s)
Index: tool/generic_erb.rb
===================================================================
--- tool/generic_erb.rb	(revision 0)
+++ tool/generic_erb.rb	(revision 19575)
@@ -0,0 +1,4 @@
+require 'erb'
+
+template = ARGV.shift
+ERB.new(File.read(template), nil, '%').run
Index: template/known_errors.inc.tmpl
===================================================================
--- template/known_errors.inc.tmpl	(revision 0)
+++ template/known_errors.inc.tmpl	(revision 19575)
@@ -0,0 +1,18 @@
+/** -*-c-*-
+ * This file is automatically generated by tools/generic_erb.rb
+ * DO NOT TOUCH!
+ *
+ * If you want to fix something, you should edit 'template/knwon_erros.inc.tmpl or defs/knwon_errors.def
+ */
+
+% error_names = ARGF.read.split(/\s+/)
+void Init_syserr(void) {
+    rb_eNOERROR = set_syserr(0, "NOERROR");
+% error_names.each do |name|
+#ifdef <%=name%>
+        set_syserr(<%=name%>, "<%=name%>");
+#else
+        set_syserr(0, "<%=name%>");
+#endif
+% end
+}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]