From 16c95b42ced7119ba013b52486e8e68317353b9a Mon Sep 17 00:00:00 2001 From: yugui Date: Fri, 26 Sep 2008 08:18:49 +0000 Subject: [PATCH] * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 16 ++ common.mk | 7 +- defs/known_errors.def | 122 +++++++++++ error.c | 385 +-------------------------------- template/known_errors.inc.tmpl | 18 ++ tool/generic_erb.rb | 4 + 6 files changed, 166 insertions(+), 386 deletions(-) create mode 100644 defs/known_errors.def create mode 100644 template/known_errors.inc.tmpl create mode 100644 tool/generic_erb.rb diff --git a/ChangeLog b/ChangeLog index 6ecad566d1..716683fc86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +Fri Sep 26 17:07:04 2008 Yuki Sonoda (Yugui) + + * 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 * thread.c (thlist_signal): clears the woken thread if nothing woke. diff --git a/common.mk b/common.mk index f6f9235d98..bb25a22294 100644 --- a/common.mk +++ b/common.mk @@ -462,7 +462,7 @@ encoding.$(OBJEXT): {$(VPATH)}encoding.c $(RUBY_H_INCLUDES) \ 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: {$(VPATH)}parse.c {$(VPATH)}lex.c {$(VPATH)}newline.c $(srcdir)/ext/ripper 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 @@ transdb.h: $(PREP) srcs-enc $(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 $@ diff --git a/defs/known_errors.def b/defs/known_errors.def new file mode 100644 index 0000000000..9f09aa9c22 --- /dev/null +++ b/defs/known_errors.def @@ -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 diff --git a/error.c b/error.c index be03f94ba4..8559f9f97f 100644 --- a/error.c +++ b/error.c @@ -983,18 +983,6 @@ syserr_eqq(VALUE self, VALUE exc) return Qfalse; } -/* - * call-seq: - * Errno.const_missing => SystemCallError - * - * Returns default SystemCallError class. - */ -static VALUE -errno_missing(VALUE self, VALUE id) -{ - return rb_eNOERROR; -} - /* * Descendants of class Exception are used to communicate * between raise methods and rescue @@ -1067,7 +1055,6 @@ Init_Exception(void) 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 @@ rb_check_frozen(VALUE obj) 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) diff --git a/template/known_errors.inc.tmpl b/template/known_errors.inc.tmpl new file mode 100644 index 0000000000..86c23e18e4 --- /dev/null +++ b/template/known_errors.inc.tmpl @@ -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 +} diff --git a/tool/generic_erb.rb b/tool/generic_erb.rb new file mode 100644 index 0000000000..7ea33fbc5f --- /dev/null +++ b/tool/generic_erb.rb @@ -0,0 +1,4 @@ +require 'erb' + +template = ARGV.shift +ERB.new(File.read(template), nil, '%').run