From 937092b8203c373c919a6f307f91e17d4bec5bb1 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 13 Feb 2003 09:11:11 +0000 Subject: * range.c (range_step): step might be float 0 < x < 1. * eval.c (rb_thread_schedule): pause if no runnable thread when there's only one thread. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e diff --git a/ChangeLog b/ChangeLog index bf18550..4e4c73b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,13 @@ Thu Feb 13 01:30:10 2003 Nobuyoshi Nakada * eval.c (rb_thread_schedule): current thread may be dead when deadlock. (ruby-bugs:PR#588) +Thu Feb 13 00:28:52 2003 Yukihiro Matsumoto + + * range.c (range_step): step might be float 0 < x < 1. + + * eval.c (rb_thread_schedule): pause if no runnable thread when + there's only one thread. + Thu Feb 13 00:09:47 2003 Nobuyoshi Nakada * file.c (strrdirsep): ignore trailing directory separators. diff --git a/compar.c b/compar.c index e8c9286..3b6622c 100644 --- a/compar.c +++ b/compar.c @@ -72,6 +72,7 @@ cmp_lt(x, y) { VALUE c = rb_funcall(x, cmp, 1, y); + if (NIL_P(c)) return Qfalse; if (rb_cmpint(c) < 0) return Qtrue; return Qfalse; } diff --git a/eval.c b/eval.c index bfd0267..56e9db8 100644 --- a/eval.c +++ b/eval.c @@ -8211,6 +8211,11 @@ rb_thread_schedule() if (!next) { /* raise fatal error to main thread */ curr_thread->node = ruby_current_node; + if (curr->next == curr) { + TRAP_BEG; + pause(); + TRAP_END; + } FOREACH_THREAD_FROM(curr, th) { fprintf(stderr, "deadlock 0x%lx: %s:", th->thread, thread_status_name(th->status)); diff --git a/file.c b/file.c index 9996423..c3828b7 100644 --- a/file.c +++ b/file.c @@ -1755,6 +1755,7 @@ rb_file_s_basename(argc, argv) if (NIL_P(fext) || !(f = rmext(p, ext))) { f = chompdirsep(p) - p; } + basename = rb_str_new(p, f); } basename = rb_str_new(p, f); OBJ_INFECT(basename, fname); diff --git a/parse.y b/parse.y index c7423f5..0c04a40 100644 --- a/parse.y +++ b/parse.y @@ -3664,7 +3664,7 @@ yylex() } pushback(c); if (ISDIGIT(c)) { - rb_warning("no . floating literal anymore; put 0 before dot"); + rb_warn("no . floating literal anymore; put 0 before dot"); } lex_state = EXPR_DOT; return '.'; diff --git a/range.c b/range.c index 585940a..97b7d68 100644 --- a/range.c +++ b/range.c @@ -242,13 +242,14 @@ range_step(argc, argv, range) } unit = NUM2LONG(step); - if (unit <= 0) { - rb_raise(rb_eArgError, "step can't be <= 0"); - } + if (unit < 0) { + rb_raise(rb_eArgError, "step can't be negative"); + } if (FIXNUM_P(b) && FIXNUM_P(e)) { /* fixnums are special */ long end = FIX2LONG(e); long i; + if (unit == 0) rb_raise(rb_eArgError, "step can't be 0"); if (!EXCL(range)) end += 1; for (i=FIX2LONG(b); i