diff options
-rw-r--r-- | ChangeLog | 47 | ||||
-rw-r--r-- | ToDo | 6 | ||||
-rw-r--r-- | array.c | 16 | ||||
-rw-r--r-- | bignum.c | 20 | ||||
-rw-r--r-- | class.c | 4 | ||||
-rw-r--r-- | eval.c | 137 | ||||
-rw-r--r-- | ext/extmk.rb.in | 2 | ||||
-rw-r--r-- | ext/pty/pty.c | 103 | ||||
-rw-r--r-- | ext/pty/shl.rb | 8 | ||||
-rw-r--r-- | ext/tk/lib/tk.rb | 25 | ||||
-rw-r--r-- | ext/tk/lib/tkfont.rb | 4 | ||||
-rw-r--r-- | file.c | 6 | ||||
-rw-r--r-- | gc.c | 131 | ||||
-rw-r--r-- | hash.c | 4 | ||||
-rw-r--r-- | intern.h | 17 | ||||
-rw-r--r-- | io.c | 5 | ||||
-rw-r--r-- | lib/pstore.rb | 2 | ||||
-rw-r--r-- | marshal.c | 32 | ||||
-rw-r--r-- | numeric.c | 31 | ||||
-rw-r--r-- | pack.c | 7 | ||||
-rw-r--r-- | process.c | 14 | ||||
-rw-r--r-- | re.c | 2 | ||||
-rw-r--r-- | signal.c | 4 | ||||
-rw-r--r-- | string.c | 14 | ||||
-rw-r--r-- | version.h | 4 |
25 files changed, 348 insertions, 297 deletions
@@ -10,6 +10,25 @@ Sun Nov 18 19:37:55 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp> * parse.y (parse_regx): parse error at unterminated regex /#{. (ruby-bugs-ja:PR#142) +Sat Nov 17 12:37:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * pack.c (pack_unpack): should give length to utf8_to_uv(). + + * pack.c (utf8_to_uv): add length check. + +Sat Nov 17 01:41:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * massages: replace "wrong #" by "wrong number". + + * marshal.c (w_float): output Infinity and NaN explicitly. + + * marshal.c (r_object): support new explicit float format. + + * eval.c (rb_thread_wait_for): select may cause ERESTART on + Solaris. + + * eval.c (rb_thread_select): ditto. + Thu Nov 15 15:29:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp> * array.c (rb_ary_join): non-nil separator must be converted to @@ -22,12 +41,36 @@ Thu Nov 15 03:37:17 2001 Usaku Nakamura <usa@ruby-lang.org> * win32/win32.c, win32/win32.h: sort out #if 0 - #endif or others. +Thu Nov 15 00:07:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * array.c (rb_ary_to_s): if rb_output_fs is nil, insert newlines + between array elements (use rb_default_rs as newline litral) + [experimental]. + +Wed Nov 14 15:16:23 2001 K.Kosako <kosako@sofnec.co.jp> + + * gc.c (init_mark_stack): no need to clear mark_stack. + + * gc.c (gc_mark_all): need to handle finalizer mark. + + * gc.c (gc_mark_rest): use MEMCPY instead of memcpy. + + * gc.c (rb_gc_mark): earlier const check to avoid pusing special + constants into mark stack. + Wed Nov 14 01:12:07 2001 Usaku Nakamura <usa@ruby-lang.org> * win32/win32.c (waitpid): fix wait count. * win32/win32.c (poll_child_status): rename from wait_child(). +Wed Nov 14 01:33:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * numeric.c (fix_to_s): 'to_s' now takes optional argument to + specify radix. [new] + + * bignum.c (rb_big_to_s): ditto. [new] + Tue Nov 13 19:50:30 2001 WATANABE Hirofumi <eban@ruby-lang.org> * configure.in: do not override CC if set. @@ -263,7 +306,7 @@ Tue Oct 30 18:21:51 2001 Usaku Nakamura <usa@ruby-lang.org> Tue Oct 30 14:04:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org> - * string.c (rb_str_chomp_bang): do smart chomp if $/ == '\n'. + * string.c (rb_str_chomp_bang): do smart chomp if $/ == '\n'. [new] * io.c (rb_io_puts): don't treat Array specially. @@ -273,7 +316,7 @@ Tue Oct 30 14:04:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org> Mon Oct 29 16:08:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org> - * regex.c (re_compile_pattern): should preverve p0 value. + * regex.c (re_compile_pattern): should preserve p0 value. Mon Oct 29 14:56:44 2001 Usaku Nakamura <usa@ruby-lang.org> @@ -31,7 +31,7 @@ Language Spec. * method combination, e.g. before, after, around, etc. * .. or something like defadvice in Emacs. * property - for methods, or for objects in general. -* in modifier, to annotate, or to encourage assertion. +* "in" modifier, to annotate, or to encourage assertion. * selector namespace - something like generic-flet in CLOS, to help RubyBehevior Hacking Interpreter @@ -70,6 +70,7 @@ Standard Libraries - Enumerable#sort_by for Schwartzian transformation - fork_and_kill_other_threads. - signal list (Signal::trap, Signal::list). +- move NameError under StandardError. * String#scanf(?) * Object#fmt(?) * Integer#{bin,oct,hex,heX} @@ -88,12 +89,13 @@ Standard Libraries * Hash::new{default} or recommend Hash#fetch? * new user-defined marshal scheme. _dump(dumper), _load(restorer) * hash etc. should handle self referenceing array/hash -* move NameError under StandardError. * library to load per-user profile seeking .ruby_profile or ruby.ini file. * warning framework (warn, warning for Ruby level) * marshal should not depend on sprintf/strtod (works bad for locale). * ternary arg pow: a.pow(b,c) == a**b%c * new caller(), e.g. call_stack; needs better name. +* remove dependency on MAXPATHLEN. +* pointer share mechanism similar to one in String for Array. Extension Libraries @@ -305,7 +305,7 @@ rb_ary_push_m(argc, argv, ary) VALUE ary; { if (argc == 0) { - rb_raise(rb_eArgError, "wrong # of arguments(at least 1)"); + rb_raise(rb_eArgError, "wrong number arguments(at least 1)"); } if (argc > 0) { while (argc--) { @@ -380,7 +380,7 @@ rb_ary_unshift_m(argc, argv, ary) VALUE ary; { if (argc == 0) { - rb_raise(rb_eArgError, "wrong # of arguments(at least 1)"); + rb_raise(rb_eArgError, "wrong number of arguments(at least 1)"); } if (argc > 0) { long len = RARRAY(ary)->len; @@ -652,7 +652,7 @@ rb_ary_aset(argc, argv, ary) return argv[2]; } if (argc != 2) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 2)", argc); } if (FIXNUM_P(argv[0])) { offset = FIX2LONG(argv[0]); @@ -682,7 +682,7 @@ rb_ary_insert(argc, argv, ary) long pos; if (argc < 2) { - rb_raise(rb_eArgError, "wrong # of arguments(at least 2)"); + rb_raise(rb_eArgError, "wrong number of arguments(at least 2)"); } pos = NUM2LONG(argv[0]); if (pos == -1) { @@ -774,6 +774,7 @@ rb_ary_dup(ary) } extern VALUE rb_output_fs; +extern VALUE rb_default_rs; static VALUE inspect_join(ary, arg) @@ -856,11 +857,12 @@ VALUE rb_ary_to_s(ary) VALUE ary; { - VALUE str; + VALUE str, sep; if (RARRAY(ary)->len == 0) return rb_str_new(0, 0); - str = rb_ary_join(ary, rb_output_fs); - if (NIL_P(str)) return rb_str_new(0, 0); + if (!NIL_P(rb_output_fs)) sep = rb_output_fs; + else sep = rb_default_rs; + str = rb_ary_join(ary, sep); return str; } @@ -10,9 +10,9 @@ **********************************************************************/ -#include "ruby.h" #include <math.h> #include <ctype.h> +#include "ruby.h" VALUE rb_cBignum; @@ -397,9 +397,7 @@ rb_big2str(x, base) hbase = 020; } else { - j = 0; - hbase = 0; - rb_raise(rb_eArgError, "Bignum cannot treat base %d", base); + rb_raise(rb_eArgError, "illegal radix %d", base); } t = rb_big_clone(x); @@ -435,10 +433,18 @@ rb_big2str(x, base) } static VALUE -rb_big_to_s(x) +rb_big_to_s(argc, argv, x) + int argc; + VALUE *argv; VALUE x; { - return rb_big2str(x, 10); + VALUE b; + int base; + + rb_scan_args(argc, argv, "01", &b); + if (argc == 0) base = 10; + else base = NUM2INT(b); + return rb_big2str(x, base); } static unsigned long @@ -1442,7 +1448,7 @@ Init_Bignum() { rb_cBignum = rb_define_class("Bignum", rb_cInteger); - rb_define_method(rb_cBignum, "to_s", rb_big_to_s, 0); + rb_define_method(rb_cBignum, "to_s", rb_big_to_s, -1); rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1); rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0); rb_define_method(rb_cBignum, "+", rb_big_plus, 1); @@ -734,7 +734,7 @@ rb_scan_args(argc, argv, fmt, va_alist) if (ISDIGIT(*p)) { n = *p - '0'; if (n > argc) - rb_raise(rb_eArgError, "wrong # of arguments (%d for %d)", argc, n); + rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, n); for (i=0; i<n; i++) { var = va_arg(vargs, VALUE*); if (var) *var = argv[i]; @@ -789,7 +789,7 @@ rb_scan_args(argc, argv, fmt, va_alist) } if (argc > i) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for %d)", argc, i); + rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, i); } return argc; @@ -91,10 +91,6 @@ struct timeval { #include <sys/select.h> #endif -#ifdef HAVE_SYS_RESOURCE_H -#include <sys/resource.h> -#endif - #include <sys/stat.h> VALUE rb_cProc; @@ -500,7 +496,6 @@ extern NODE *ruby_eval_tree; extern int ruby_nerrs; static VALUE rb_eLocalJumpError; -static VALUE rb_eSysStackError; extern VALUE ruby_top_self; @@ -3055,7 +3050,7 @@ rb_eval(self, n) case NODE_ATTRSET: if (ruby_frame->argc != 1) - rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)", + rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)", ruby_frame->argc); result = rb_ivar_set(self, node->nd_vid, ruby_frame->argv[0]); break; @@ -3587,7 +3582,7 @@ rb_f_raise(argc, argv) mesg = rb_funcall(argv[0], exception, n, argv[1]); break; default: - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); break; } if (argc > 0) { @@ -3685,13 +3680,13 @@ rb_yield_0(val, self, klass, pcall) if ((state = EXEC_TAG()) == 0) { if (block->var == (NODE*)1) { if (pcall && RARRAY(val)->len != 0) { - rb_raise(rb_eArgError, "wrong # of arguments (%d for 0)", + rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", RARRAY(val)->len); } } else if (block->var == (NODE*)2) { if (TYPE(val) == T_ARRAY && RARRAY(val)->len != 0) { - rb_raise(rb_eArgError, "wrong # of arguments (%d for 0)", + rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", RARRAY(val)->len); } } @@ -3850,7 +3845,7 @@ massign(self, node, val, pcall) i++; list = list->nd_next; } - rb_raise(rb_eArgError, "wrong # of arguments (%d for %d)", len, i); + rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", len, i); } static void @@ -4164,7 +4159,7 @@ rb_f_missing(argc, argv, obj) rb_raise(rb_eArgError, "no id given"); } - rb_stack_check(); + ruby_stack_check(); id = SYM2ID(argv[0]); @@ -4255,57 +4250,6 @@ rb_undefined(obj, id, argc, argv, call_status) return rb_funcall2(obj, missing, argc+1, nargv); } -#ifdef DJGPP -static unsigned int STACK_LEVEL_MAX = 65535; -#else -#ifdef __human68k__ -extern unsigned int _stacksize; -# define STACK_LEVEL_MAX (_stacksize - 4096) -# undef HAVE_GETRLIMIT -#else -#ifdef HAVE_GETRLIMIT -static unsigned int STACK_LEVEL_MAX = 655300; -#else -# define STACK_LEVEL_MAX 655300 -#endif -#endif -#endif - -extern VALUE *rb_gc_stack_start; -static int -stack_length(p) - VALUE **p; -{ -#ifdef C_ALLOCA - VALUE stack_end; - alloca(0); -# define STACK_END (&stack_end) -#else -# if defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS) - VALUE *stack_end = __builtin_frame_address(0); -# else - VALUE *stack_end = alloca(1); -# endif -# define STACK_END (stack_end) -#endif - if (p) *p = STACK_END; - -#ifdef __sparc__ - return rb_gc_stack_start - STACK_END + 0x80; -#else - return (STACK_END < rb_gc_stack_start) ? rb_gc_stack_start - STACK_END - : STACK_END - rb_gc_stack_start; -#endif -} - -void -rb_stack_check() -{ - if (stack_length(0) > STACK_LEVEL_MAX) { - rb_raise(rb_eSysStackError, "stack level too deep"); - } -} - static VALUE call_cfunc(func, recv, len, argc, argv) VALUE (*func)(); @@ -4314,7 +4258,7 @@ call_cfunc(func, recv, len, argc, argv) VALUE *argv; { if (len >= 0 && argc != len) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for %d)", + rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, len); } @@ -4421,7 +4365,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) if ((++tick & 0xff) == 0) { CHECK_INTS; /* better than nothing */ - rb_stack_check(); + ruby_stack_check(); } PUSH_ITER(itr); PUSH_FRAME(); @@ -4468,7 +4412,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) /* for attr get/set */ case NODE_IVAR: if (argc != 0) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 0)", argc); } case NODE_ATTRSET: /* for re-scoped/renamed method */ @@ -4532,7 +4476,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) i = node->nd_cnt; if (i > argc) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for %d)", + rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, i); } if (node->nd_rest == -1) { @@ -4544,7 +4488,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) optnode = optnode->nd_next; } if (opt < argc) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for %d)", + rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, opt); } ruby_frame->argc = opt; @@ -5212,7 +5156,7 @@ specific_eval(argc, argv, klass, self) { if (rb_block_given_p()) { if (argc > 0) { - rb_raise(rb_eArgError, "wrong # of arguments (%d for 0)", argc); + rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc); } return yield_under(klass, self); } @@ -5231,7 +5175,7 @@ specific_eval(argc, argv, klass, self) SafeStringValue(argv[0]); } if (argc > 3) { - rb_raise(rb_eArgError, "wrong # of arguments: %s(src) or %s{..}", + rb_raise(rb_eArgError, "wrong number of arguments: %s(src) or %s{..}", rb_id2name(ruby_frame->last_func), rb_id2name(ruby_frame->last_func)); } @@ -5824,7 +5768,7 @@ rb_obj_extend(argc, argv, obj) int i; if (argc == 0) { - rb_raise(rb_eArgError, "wrong # of arguments(0 for 1)"); + rb_raise(rb_eArgError, "wrong number of arguments(0 for 1)"); } for (i=0; i<argc; i++) Check_Type(argv[i], T_MODULE); for (i=0; i<argc; i++) { @@ -6102,19 +6046,6 @@ Init_eval() rb_global_variable(&trace_func); rb_define_virtual_variable("$SAFE", safe_getter, safe_setter); - -#ifdef HAVE_GETRLIMIT - { - struct rlimit rlim; - - if (getrlimit(RLIMIT_STACK, &rlim) == 0) { - double space = (double)rlim.rlim_cur*0.2; - - if (space > 1024*1024) space = 1024*1024; - STACK_LEVEL_MAX = (rlim.rlim_cur - space) / sizeof(VALUE); - } - } -#endif } VALUE rb_f_autoload(); @@ -6992,7 +6923,7 @@ rb_mod_define_method(argc, argv, mod) body = argv[1]; } else { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)", argc); } if (TYPE(body) != T_DATA) { /* type error */ @@ -7017,7 +6948,6 @@ void Init_Proc() { rb_eLocalJumpError = rb_define_class("LocalJumpError", rb_eStandardError); - rb_eSysStackError = rb_define_class("SystemStackError", rb_eStandardError); rb_cProc = rb_define_class("Proc", rb_cObject); rb_undef_method(CLASS_OF(rb_cProc), "allocate"); @@ -7321,6 +7251,8 @@ static char *th_signm; #define RESTORE_RAISE 5 #define RESTORE_SIGNAL 6 +extern VALUE *rb_gc_stack_start; + static void rb_thread_save_context(th) rb_thread_t th; @@ -7329,7 +7261,7 @@ rb_thread_save_context(th) int len; static VALUE tval; - len = stack_length(&pos); + len = ruby_stack_length(&pos); th->stk_len = 0; th->stk_pos = (rb_gc_stack_start<pos)?rb_gc_stack_start :rb_gc_stack_start - len; @@ -7856,6 +7788,9 @@ rb_thread_wait_for(time) if (n < 0) { switch (errno) { case EINTR: +#ifdef ERESTART + case ERESTART: +#endif return; default: rb_sys_fail("sleep"); @@ -7927,14 +7862,22 @@ rb_thread_select(max, read, write, except, timeout) TRAP_BEG; n = select(max, read, write, except, tvp); TRAP_END; - if (n < 0 && errno == EINTR) { - if (timeout) { - double d = timeofday() - limit; + if (n < 0) { + switch (errno) { + case EINTR: +#ifdef ERESTART + case ERESTART: +#endif + if (timeout) { + double d = timeofday() - limit; - tv.tv_sec = (unsigned int)d; - tv.tv_usec = (long)((d-(double)tv.tv_sec)*1e6); + tv.tv_sec = (unsigned int)d; + tv.tv_usec = (long)((d-(double)tv.tv_sec)*1e6); + } + continue; + default: + break; } - continue; } return n; } @@ -7943,8 +7886,14 @@ rb_thread_select(max, read, write, except, timeout) TRAP_BEG; n = select(max, read, write, except, timeout); TRAP_END; - if (n < 0 && errno == EINTR) { - continue; + if (n < 0) { + switch (errno) { + case EINTR: +#ifdef ERESTART + case ERESTART: +#endif + continue; + } } return n; } diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in index 72db3db403..be1c20fd53 100644 --- a/ext/extmk.rb.in +++ b/ext/extmk.rb.in @@ -638,7 +638,7 @@ def extmake(target) if $static_ext.size > 0 || !File.exist?("./Makefile") || older("./Makefile", "#{$top_srcdir}/ext/@setup@") || - older("./Makefile", "../extmk.rb") || + older("./Makefile", "#{$topdir}/ext/extmk.rb") || older("./Makefile", "#{$top_srcdir}/ext/#{target}/makefile.rb") || older("./Makefile", "#{$top_srcdir}/ext/#{target}/extconf.rb") then diff --git a/ext/pty/pty.c b/ext/pty/pty.c index 748869865e..c3a3a6fa15 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -1,6 +1,7 @@ #include "config.h" #include <stdio.h> #include <sys/types.h> +#include <sys/stat.h> #include <sys/file.h> #include <fcntl.h> #include <errno.h> @@ -31,6 +32,7 @@ #if !defined(HAVE_OPENPTY) #ifdef __hpux +static char *MasterDevice = "/dev/ptym/pty%s", *SlaveDevice = "/dev/pty/tty%s", *deviceNo[] = { @@ -54,6 +56,7 @@ char *MasterDevice = "/dev/ptym/pty%s", }; #else /* NOT HPUX */ #ifdef _IBMESA /* AIX/ESA */ +static char *MasterDevice = "/dev/ptyp%s", *SlaveDevice = "/dev/ttyp%s", *deviceNo[] = { @@ -75,6 +78,7 @@ char *MasterDevice = "/dev/ptyp%s", "f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff", }; #else +static char *MasterDevice = "/dev/pty%s", *SlaveDevice = "/dev/tty%s", *deviceNo[] = { @@ -90,7 +94,7 @@ char *MasterDevice = "/dev/pty%s", #endif /* HPUX */ #endif /* !defined(HAVE_OPENPTY) */ -char SlaveName[DEVICELEN]; +static char SlaveName[DEVICELEN]; extern int errno; @@ -107,64 +111,69 @@ extern int errno; #endif /* NO_SETEUID */ struct pty_info { - int fd; - pid_t child_pid; + int fd; + pid_t child_pid; + VALUE thread; }; static void -pty_raise(cpid) +pty_raise(thread, cpid, stop) + VALUE thread; int cpid; + int stop; { char buf[1024]; - snprintf(buf, sizeof(buf), - "eval %%Q{Thread.main.raise 'pty - stopped: %d'}, nil, \"%s\", %d", - cpid, ruby_sourcefile, ruby_sourceline); - rb_eval_string(buf); + snprintf(buf, sizeof(buf), "pty - %s: %d", stop ? "stopped" : "changed", cpid); + rb_funcall(thread, rb_intern("raise"), 1, rb_str_new2(buf)); } static VALUE -pty_syswait(pid) - int pid; +pty_syswait(info) + struct pty_info *info; { int cpid, status; - cpid = rb_waitpid(pid, &status, WUNTRACED); - - printf("PTY command (%d) finished (%d:%d)\n", pid, cpid, status); + cpid = rb_waitpid(info->child_pid, &status, WUNTRACED); + printf("cpid: %d (%d)\n", cpid, status); + if (cpid == 0 || cpid == -1) return Qnil; #ifdef IF_STOPPED if (IF_STOPPED(status)) { /* suspend */ - pty_raise(cpid); + pty_raise(info->thread, cpid, Qtrue); } #else #ifdef WIFSTOPPED if (WIFSTOPPED(status)) { /* suspend */ - pty_raise(cpid); + pty_raise(info->thread, cpid, Qtrue); } #else ---->> Either IF_STOPPED or WIFSTOPPED is needed <<---- #endif /* WIFSTOPPED */ #endif /* IF_STOPPED */ + pty_raise(info->thread, cpid, Qfalse); return Qnil; } static void getDevice _((int*, int*)); static void -establishShell(shellname, info) - char *shellname; +establishShell(argc, argv, info) + int argc; + VALUE *argv; struct pty_info *info; { - static int i,j,master,slave,currentPid; + static int i,master,slave,currentPid; char *p,*getenv(); struct passwd *pwent; - RETSIGTYPE chld_changed(); - - if (shellname[0] == '\0') { + VALUE v; + + if (argc == 0) { + char *shellname; + if ((p = getenv("SHELL")) != NULL) { shellname = p; } @@ -175,17 +184,20 @@ establishShell(shellname, info) else shellname = "/bin/sh"; } + v = rb_str_new2(shellname); + argc = 1; + argv = &v; } getDevice(&master,&slave); currentPid = getpid(); - if((i = vfork()) < 0) { + if((i = fork()) < 0) { rb_sys_fail("fork failed"); } if(i == 0) { /* child */ - int argc; - char *argv[1024]; + /* int argc; + char *argv[1024]; */ currentPid = getpid(); /* @@ -232,23 +244,11 @@ establishShell(shellname, info) dup2(slave,1); dup2(slave,2); close(slave); - #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) || defined(HAVE_SETRESUID) seteuid(getuid()); #endif - argc = 0; - for (i = 0; shellname[i];) { - while (isspace(shellname[i])) i++; - for (j = i; shellname[j] && !isspace(shellname[j]); j++); - argv[argc] = (char*)xmalloc(j-i+1); - strncpy(argv[argc],&shellname[i],j-i); - argv[argc][j-i] = 0; - i = j; - argc++; - } - argv[argc] = NULL; - execvp(argv[0],argv); + rb_f_exec(argc, argv); sleep(1); _exit(1); } @@ -361,8 +361,10 @@ freeDevice() /* ruby function: getpty */ static VALUE -pty_getpty(self, command) - VALUE self, command; +pty_getpty(argc, argv, self) + int argc; + VALUE *argv; + VALUE self; { VALUE res, th; struct pty_info info; @@ -373,35 +375,28 @@ pty_getpty(self, command) MakeOpenFile(rport, rfptr); MakeOpenFile(wport, wfptr); - if (TYPE(command) == T_ARRAY) - command = rb_ary_join(command,rb_str_new2(" ")); - Check_SafeStr(command); - - establishShell(RSTRING(command)->ptr,&info); + establishShell(argc, argv, &info); rfptr->mode = rb_io_mode_flags("r"); rfptr->f = fdopen(info.fd, "r"); - rfptr->path = strdup(RSTRING(command)->ptr); + rfptr->path = 0; /*strdup(RSTRING(command)->ptr); */ wfptr->mode = rb_io_mode_flags("w"); wfptr->f = fdopen(dup(info.fd), "w"); - wfptr->path = strdup(RSTRING(command)->ptr); + wfptr->path = 0; /* strdup(RSTRING(command)->ptr); */ res = rb_ary_new2(3); rb_ary_store(res,0,(VALUE)rport); rb_ary_store(res,1,(VALUE)wport); rb_ary_store(res,2,INT2FIX(info.child_pid)); - printf("start watching PTY command (%d)\n", info.child_pid); - th = rb_thread_create(pty_syswait, (void*)info.child_pid); + info.thread = rb_thread_current(); + th = rb_thread_create(pty_syswait, (void*)&info); if (rb_block_given_p()) { res = rb_yield((VALUE)res); rb_funcall(th, rb_intern("kill"), 0, 0); - return res; - } - else { - return res; } + return res; } /* ruby function: protect_signal - obsolete */ @@ -429,8 +424,8 @@ void Init_pty() { cPTY = rb_define_module("PTY"); - rb_define_module_function(cPTY,"getpty",pty_getpty,1); - rb_define_module_function(cPTY,"spawn",pty_getpty,1); + rb_define_module_function(cPTY,"getpty",pty_getpty,-1); + rb_define_module_function(cPTY,"spawn",pty_getpty,-1); rb_define_module_function(cPTY,"protect_signal",pty_protect,0); rb_define_module_function(cPTY,"reset_signal",pty_reset_signal,0); } diff --git a/ext/pty/shl.rb b/ext/pty/shl.rb index 0c04a2735c..cdaf8d7398 100644 --- a/ext/pty/shl.rb +++ b/ext/pty/shl.rb @@ -18,9 +18,7 @@ $r_pty = nil $w_pty = nil def writer - PTY.protect_signal do - system "stty -echo raw" - end + system "stty -echo raw" begin while true c = STDIN.getc @@ -35,9 +33,7 @@ def writer $reader.raise(nil) return 'Exit' ensure - PTY.protect_signal do - system "stty echo -raw" - end + system "stty echo -raw" end end diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index 967d185053..26b3dca034 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -1564,31 +1564,6 @@ module TkXIM end end -module TkXIM - include Tk - extend Tk - - def TkXIM.useinputmethods(window=nil,value=nil) - if window - if value - tk_call 'tk', 'useinputmethods', '-displayof', window.path, value - else - tk_call 'tk', 'useinputmethods', '-displayof', window.path - end - else - if value - tk_call 'tk', 'useinputmethods', value - else - tk_call 'tk', 'useinputmethods' - end - end - end - - def useinputmethods(value=nil) - TkXIM.useinputmethods(self,value) - end -end - module TkWinfo include Tk extend Tk diff --git a/ext/tk/lib/tkfont.rb b/ext/tk/lib/tkfont.rb index 65842e0188..c44b215ee9 100644 --- a/ext/tk/lib/tkfont.rb +++ b/ext/tk/lib/tkfont.rb @@ -691,10 +691,10 @@ class TkFont def metrics_core_tk8x(font, window, option=nil) if option if window - number(tk_call('font', 'metrics', font, "-#{option}")) - else number(tk_call('font', 'metrics', font, "-displayof", window, "-#{option}")) + else + number(tk_call('font', 'metrics', font, "-#{option}")) end else l = tk_split_list(if window @@ -1301,7 +1301,7 @@ rb_file_s_umask(argc, argv) omask = umask(NUM2INT(argv[0])); } else { - rb_raise(rb_eArgError, "wrong # of argument"); + rb_raise(rb_eArgError, "wrong number of argument"); } return INT2FIX(omask); } @@ -1742,7 +1742,7 @@ test_check(n, argc, argv) int i; n+=1; - if (n != argc) rb_raise(rb_eArgError, "wrong # of arguments(%d for %d)", argc, n); + if (n != argc) rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, n); for (i=1; i<n; i++) { switch (TYPE(argv[i])) { case T_STRING: @@ -1766,7 +1766,7 @@ rb_f_test(argc, argv) { int cmd; - if (argc == 0) rb_raise(rb_eArgError, "wrong # of arguments"); + if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments"); #if 0 /* 1.7 behavior? */ if (argc == 1) { return RTEST(argv[0]) ? Qtrue : Qfalse; @@ -21,6 +21,10 @@ #include <stdio.h> #include <setjmp.h> +#ifdef HAVE_SYS_RESOURCE_H +#include <sys/resource.h> +#endif + void re_free_registers _((struct re_registers*)); void rb_io_fptr_finalize _((struct OpenFile*)); @@ -345,6 +349,68 @@ rb_data_object_alloc(klass, datap, dmark, dfree) extern st_table *rb_class_tbl; VALUE *rb_gc_stack_start = 0; +#ifdef DJGPP +static unsigned int STACK_LEVEL_MAX = 65535; +#else +#ifdef __human68k__ +extern unsigned int _stacksize; +# define STACK_LEVEL_MAX (_stacksize - 4096) +# undef HAVE_GETRLIMIT +#else +#ifdef HAVE_GETRLIMIT +static unsigned int STACK_LEVEL_MAX = 655300; +#else +# define STACK_LEVEL_MAX 655300 +#endif +#endif +#endif + +#ifdef C_ALLOCA +# define SET_STACK_END VALUE stack_end; alloca(0); +# define STACK_END (&stack_end) +#else +# if defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS) +# define SET_STACK_END VALUE *stack_end = __builtin_frame_address(0); +# else +# define SET_STACK_END VALUE *stack_end = alloca(1); +# endif +# define STACK_END (stack_end) +#endif +#ifdef __sparc__ +# define STACK_LENGTH (rb_gc_stack_start - STACK_END + 0x80) +#else +# define STACK_LENGTH ((STACK_END < rb_gc_stack_start) ? rb_gc_stack_start - STACK_END\ + : STACK_END - rb_gc_stack_start) +#endif + +#define CHECK_STACK(ret) do {\ + SET_STACK_END;\ + (ret) = (STACK_LENGTH > STACK_LEVEL_MAX);\ +} while (0)\ + +int +ruby_stack_length(p) + VALUE **p; +{ + int ret; + + SET_STACK_END; + if (p) *p = STACK_END; + return STACK_LENGTH; +} + +static VALUE rb_eSysStackError; + +void +ruby_stack_check() +{ + int ret; + + CHECK_STACK(ret); + if (ret) { + rb_raise(rb_eSysStackError, "stack level too deep"); + } +} #define MARK_STACK_MAX 1024 static VALUE mark_stack[MARK_STACK_MAX]; @@ -356,7 +422,6 @@ init_mark_stack() { mark_stack_overflow = 0; mark_stack_ptr = mark_stack; - memset(mark_stack, 0, MARK_STACK_MAX); } #define MARK_STACK_EMPTY (mark_stack_ptr == mark_stack) @@ -375,8 +440,8 @@ gc_mark_all() for (i = 0; i < heaps_used; i++) { p = heaps[i]; pend = p + heaps_limits[i]; while (p < pend) { - if (!(rb_special_const_p((VALUE)p)) - && p->as.basic.flags&FL_MARK) { + if ((p->as.basic.flags & FL_MARK) && + (p->as.basic.flags != FL_MARK)) { rb_gc_mark_children((VALUE)p); } p++; @@ -392,8 +457,8 @@ gc_mark_rest() VALUE *p; p = (mark_stack_ptr - mark_stack) + tmp_arry; - memcpy(tmp_arry, mark_stack, MARK_STACK_MAX); - + MEMCPY(tmp_arry, mark_stack, VALUE, MARK_STACK_MAX); + init_mark_stack(); while(p != tmp_arry){ @@ -402,39 +467,6 @@ gc_mark_rest() } } -#if defined(DJGPP) -# define STACK_LEVEL_MAX 65535; -#elif defined(__human68k__) -extern unsigned int _stacksize; -# define STACK_LEVEL_MAX (_stacksize - 4096) -#else -# define STACK_LEVEL_MAX 655300 -#endif - -#ifdef C_ALLOCA -# define SET_STACK_END VALUE stack_end; alloca(0); -# define STACK_END (&stack_end) -#else -# if defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS) -# define SET_STACK_END VALUE *stack_end = __builtin_frame_address(0); -# else -# define SET_STACK_END VALUE *stack_end = alloca(1); -# endif -# define STACK_END (stack_end) -#endif -#ifdef __sparc__ -# define STACK_LENGTH (rb_gc_stack_start - STACK_END + 0x80) -#else -# define STACK_LENGTH ((STACK_END < rb_gc_stack_start) ? rb_gc_stack_start - STACK_END\ - : STACK_END - rb_gc_stack_start) -#endif - -#define CHECK_STACK(ret) do {\ - SET_STACK_END;\ - ret = (STACK_LENGTH > STACK_LEVEL_MAX);\ -} while (0)\ - - static inline int is_pointer_to_heap(ptr) void *ptr; @@ -534,6 +566,10 @@ rb_gc_mark(ptr) { register RVALUE *obj = RANY(ptr); + if (rb_special_const_p(ptr)) return; /* special const not marked */ + if (obj->as.basic.flags == 0) return; /* free cell */ + if (obj->as.basic.flags & FL_MARK) return; /* already marked */ + if (!mark_stack_overflow){ int ret; CHECK_STACK(ret); @@ -544,15 +580,10 @@ rb_gc_mark(ptr) return; }else{ mark_stack_overflow = 1; - printf("mark_stack_overflow\n"); } } } - if (rb_special_const_p((VALUE)obj)) return; /* special const not marked */ - if (obj->as.basic.flags == 0) return; /* free cell */ - if (obj->as.basic.flags & FL_MARK) return; /* already marked */ - obj->as.basic.flags |= FL_MARK; if (mark_stack_overflow){ @@ -1171,6 +1202,18 @@ Init_stack(addr) if (!addr) addr = &start; rb_gc_stack_start = addr; #endif +#ifdef HAVE_GETRLIMIT + { + struct rlimit rlim; + + if (getrlimit(RLIMIT_STACK, &rlim) == 0) { + double space = (double)rlim.rlim_cur*0.2; + + if (space > 1024*1024) space = 1024*1024; + STACK_LEVEL_MAX = (rlim.rlim_cur - space) / sizeof(VALUE); + } + } +#endif } void @@ -1474,4 +1517,6 @@ Init_GC() rb_global_variable(&finalizers); rb_gc_unregister_address(&rb_mObSpace); finalizers = rb_ary_new(); + + rb_eSysStackError = rb_define_class("SystemStackError", rb_eStandardError); } @@ -303,7 +303,7 @@ rb_hash_fetch(argc, argv, hash) if (!st_lookup(RHASH(hash)->tbl, key, &val)) { if (rb_block_given_p()) { if (argc > 1) { - rb_raise(rb_eArgError, "wrong # of arguments", argc); + rb_raise(rb_eArgError, "wrong number of arguments", argc); } return rb_yield(key); } @@ -928,7 +928,7 @@ env_fetch(argc, argv) if (!env) { if (rb_block_given_p()) { if (argc > 1) { - rb_raise(rb_eArgError, "wrong # of arguments", argc); + rb_raise(rb_eArgError, "wrong number of arguments", argc); } return rb_yield(key); } @@ -107,13 +107,11 @@ void rb_define_singleton_method _((VALUE, const char*, VALUE(*)(ANYARGS), int)); void rb_define_private_method _((VALUE, const char*, VALUE(*)(ANYARGS), int)); VALUE rb_singleton_class _((VALUE)); /* enum.c */ -VALUE rb_enum_length _((VALUE)); /* error.c */ EXTERN int ruby_nerrs; VALUE rb_exc_new _((VALUE, const char*, long)); VALUE rb_exc_new2 _((VALUE, const char*)); VALUE rb_exc_new3 _((VALUE, VALUE)); -void rb_stack_check _((void)); NORETURN(void rb_loaderror __((const char*, ...))); NORETURN(void rb_name_error __((VALUE id, const char*, ...))); void rb_compile_error __((const char*, ...)); @@ -191,6 +189,8 @@ void rb_file_const _((const char*, VALUE)); int rb_find_file_ext _((VALUE*, const char* const*)); VALUE rb_find_file _((VALUE)); /* gc.c */ +void ruby_stack_check _((void)); +int ruby_stack_length _((VALUE**)); void rb_gc_mark_locations _((VALUE*, VALUE*)); void rb_mark_tbl _((struct st_table*)); void rb_mark_hash _((struct st_table*)); @@ -259,12 +259,12 @@ VALUE rb_Array _((VALUE)); /* parse.y */ EXTERN int ruby_sourceline; EXTERN char *ruby_sourcefile; -#define yyparse rb_yyparse -#define yylex rb_yylex -#define yyerror rb_yyerror -#define yylval rb_yylval -#define yychar rb_yychar -#define yydebug rb_yydebug +#define yyparse ruby_yyparse +#define yylex ruby_yylex +#define yyerror ruby_yyerror +#define yylval ruby_yylval +#define yychar ruby_yychar +#define yydebug ruby_yydebug int yyparse _((void)); ID rb_id_attrset _((ID)); void rb_parser_append_print _((void)); @@ -280,6 +280,7 @@ void rb_lastline_set _((VALUE)); VALUE rb_sym_all_symbols _((void)); /* process.c */ int rb_proc_exec _((const char*)); +VALUE rb_f_exec _((int,VALUE*)); int rb_waitpid _((int,int*,int)); void rb_syswait _((int)); VALUE rb_proc_times _((VALUE)); @@ -2206,6 +2206,11 @@ rb_io_puts(argc, argv, out) line = rb_str_new2("nil"); } else { +#if 0 + if (TYPE(argv[i]) == T_ARRAY) { + rb_warn("puts behavior changed for Array"); + } +#endif line = rb_obj_as_string(argv[i]); } rb_io_write(out, line); diff --git a/lib/pstore.rb b/lib/pstore.rb index 651297cf8f..0543986ae5 100644 --- a/lib/pstore.rb +++ b/lib/pstore.rb @@ -132,7 +132,7 @@ class PStore ensure @table = nil @transaction = false - file.close + file.close if file end value end @@ -10,6 +10,8 @@ **********************************************************************/ +#include <math.h> + #include "ruby.h" #include "rubyio.h" #include "st.h" @@ -52,7 +54,7 @@ shortlen(len, ds) #endif #define MARSHAL_MAJOR 4 -#define MARSHAL_MINOR 6 +#define MARSHAL_MINOR 7 #define TYPE_NIL '0' #define TYPE_TRUE 'T' @@ -185,7 +187,17 @@ w_float(d, arg) { char buf[100]; - sprintf(buf, "%.16g", d); + if (isinf(d)) { + if (d < 0) strcpy(buf, "-inf"); + else strcpy(buf, "inf"); + } + else if (isnan(d)) { + strcpy(buf, "nan"); + } + else { + /* xxx: should not use system's sprintf(3) */ + sprintf(buf, "%.16g", d); + } w_bytes(buf, strlen(buf), arg); } @@ -832,9 +844,23 @@ r_object(arg) case TYPE_FLOAT: { char *buf; + double d, t = 0.0; r_bytes(buf, arg); - v = rb_float_new(strtod(buf, 0)); + if (strcmp(buf, "nan") == 0) { + d = t / t; + } + else if (strcmp(buf, "inf") == 0) { + d = 1.0 / t; + } + else if (strcmp(buf, "-inf") == 0) { + d = -1.0 / t; + } + else { + /* xxx: should not use system's strtod(3) */ + d = strtod(buf, 0); + } + v = rb_float_new(d); return r_regist(v, arg); } @@ -960,17 +960,30 @@ rb_fix2str(x, base) if (base == 10) fmt[2] = 'd'; else if (base == 16) fmt[2] = 'x'; else if (base == 8) fmt[2] = 'o'; - else rb_fatal("fixnum cannot treat base %d", base); + else rb_raise(rb_eArgError, "illegal radix %d", base); sprintf(buf, fmt, FIX2LONG(x)); return rb_str_new2(buf); } static VALUE -fix_to_s(in) - VALUE in; +fix_to_s(argc, argv, x) + int argc; + VALUE *argv; + VALUE x; { - return rb_fix2str(in, 10); + VALUE b; + int base; + + rb_scan_args(argc, argv, "01", &b); + if (argc == 0) base = 10; + else base = NUM2INT(b); + + if (base == 2) { + /* rb_fix2str() does not handle binary */ + return rb_big2str(rb_int2big(FIX2INT(x)), 2); + } + return rb_fix2str(x, base); } static VALUE @@ -1343,13 +1356,6 @@ fix_to_f(num) } static VALUE -fix_type(fix) - VALUE fix; -{ - return rb_cFixnum; -} - -static VALUE fix_abs(fix) VALUE fix; { @@ -1606,8 +1612,7 @@ Init_Numeric() rb_define_singleton_method(rb_cFixnum, "induced_from", rb_fix_induced_from, 1); rb_define_singleton_method(rb_cInteger, "induced_from", rb_int_induced_from, 1); - rb_define_method(rb_cFixnum, "to_s", fix_to_s, 0); - rb_define_method(rb_cFixnum, "type", fix_type, 0); + rb_define_method(rb_cFixnum, "to_s", fix_to_s, -1); rb_define_method(rb_cFixnum, "id2name", fix_id2name, 0); @@ -1420,12 +1420,12 @@ pack_unpack(str, fmt) case 'U': if (len > send - s) len = send - s; - while (len-- > 0 && s < send) { - int alen; + while (len > 0 && s < send) { + int alen = len; unsigned long l; l = utf8_to_uv(s, &alen); - s += alen; + s += alen; len -= alen; rb_ary_push(ary, rb_uint2inum(l)); } break; @@ -1767,6 +1767,7 @@ utf8_to_uv(p, lenp) else if (c < 0xfc) n = 5; else if (c < 0xfe) n = 6; else if (c == 0xfe) n = 7; + if (n > *lenp) return 0; *lenp = n--; uv = c; @@ -673,7 +673,7 @@ proc_spawn(sv) } #endif /* __human68k__ */ -static VALUE +VALUE rb_f_exec(argc, argv) int argc; VALUE *argv; @@ -681,7 +681,7 @@ rb_f_exec(argc, argv) VALUE prog = 0; if (argc == 0) { - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } if (TYPE(argv[0]) == T_ARRAY) { @@ -804,7 +804,7 @@ rb_f_system(argc, argv) fflush(stderr); if (argc == 0) { rb_last_status = Qnil; - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } if (TYPE(argv[0]) == T_ARRAY) { @@ -828,7 +828,7 @@ rb_f_system(argc, argv) if (argc == 0) { rb_last_status = Qnil; - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } if (TYPE(argv[0]) == T_ARRAY) { @@ -856,7 +856,7 @@ rb_f_system(argc, argv) fflush(stderr); if (argc == 0) { rb_last_status = Qnil; - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } if (TYPE(argv[0]) == T_ARRAY) { @@ -884,7 +884,7 @@ rb_f_system(argc, argv) fflush(stderr); if (argc == 0) { rb_last_status = Qnil; - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } if (TYPE(argv[0]) == T_ARRAY) { @@ -948,7 +948,7 @@ rb_f_sleep(argc, argv) rb_thread_wait_for(rb_time_interval(argv[0])); } else { - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } end = time(0) - beg; @@ -1013,7 +1013,7 @@ rb_reg_initialize_m(argc, argv, self) int flags = 0; if (argc == 0 || argc > 3) { - rb_raise(rb_eArgError, "wrong # of argument"); + rb_raise(rb_eArgError, "wrong number of argument"); } if (argc >= 2) { if (FIXNUM_P(argv[1])) flags = FIX2INT(argv[1]); @@ -205,7 +205,7 @@ rb_f_kill(argc, argv) rb_secure(2); if (argc < 2) - rb_raise(rb_eArgError, "wrong # of arguments -- kill(sig, pid...)"); + rb_raise(rb_eArgError, "wrong number of arguments -- kill(sig, pid...)"); switch (TYPE(argv[0])) { case T_FIXNUM: sig = FIX2INT(argv[0]); @@ -617,7 +617,7 @@ sig_trap(argc, argv) rb_secure(2); if (argc == 0 || argc > 2) { - rb_raise(rb_eArgError, "wrong # of arguments -- trap(sig, cmd)/trap(sig){...}"); + rb_raise(rb_eArgError, "wrong number of arguments -- trap(sig, cmd)/trap(sig){...}"); } arg.sig = argv[0]; @@ -1139,7 +1139,7 @@ rb_str_aref_m(argc, argv, str) return rb_str_substr(str, NUM2INT(argv[0]), NUM2INT(argv[1])); } if (argc != 1) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)", argc); } return rb_str_aref(str, argv[0]); } @@ -1295,7 +1295,7 @@ rb_str_aset_m(argc, argv, str) return argv[2]; } if (argc != 2) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 2)", argc); } return rb_str_aset(str, argv[0], argv[1]); } @@ -1328,7 +1328,7 @@ rb_str_slice_bang(argc, argv, str) int i; if (argc < 1 || 2 < argc) { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)", argc); } for (i=0; i<argc; i++) { buf[i] = argv[i]; @@ -1379,7 +1379,7 @@ rb_str_sub_bang(argc, argv, str) if (OBJ_TAINTED(repl)) tainted = 1; } else { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 2)", argc); } pat = get_pat(argv[0]); @@ -1453,7 +1453,7 @@ str_gsub(argc, argv, str, bang) if (OBJ_TAINTED(repl)) tainted = 1; } else { - rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)", argc); + rb_raise(rb_eArgError, "wrong number of arguments(%d for 2)", argc); } pat = get_pat(argv[0]); @@ -2225,7 +2225,7 @@ rb_str_delete_bang(argc, argv, str) int i; if (argc < 1) { - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } for (i=0; i<argc; i++) { VALUE s = argv[i]; @@ -2350,7 +2350,7 @@ rb_str_count(argc, argv, str) int i; if (argc < 1) { - rb_raise(rb_eArgError, "wrong # of arguments"); + rb_raise(rb_eArgError, "wrong number of arguments"); } for (i=0; i<argc; i++) { VALUE s = argv[i]; @@ -1,4 +1,4 @@ #define RUBY_VERSION "1.7.2" -#define RUBY_RELEASE_DATE "2001-11-18" +#define RUBY_RELEASE_DATE "2001-11-19" #define RUBY_VERSION_CODE 172 -#define RUBY_RELEASE_CODE 20011118 +#define RUBY_RELEASE_CODE 20011119 |