From 57fb2199059cb55b632d093c2e64c8a3c60acfbb Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 15 Apr 2012 00:06:13 +0000 Subject: * reduce UNREACHABLE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35333 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- bignum.c | 42 ++++++++++++++++++------------------------ class.c | 11 ++++------- dir.c | 8 ++------ encoding.c | 11 ++++------- ext/pty/pty.c | 1 + file.c | 29 ++++++++++++----------------- io.c | 20 ++++++-------------- marshal.c | 15 +++++---------- numeric.c | 12 ++++++------ ruby.c | 4 ++-- win32/win32.c | 8 ++------ 11 files changed, 62 insertions(+), 99 deletions(-) diff --git a/bignum.c b/bignum.c index 9d09098f29..3551f4fb6a 100644 --- a/bignum.c +++ b/bignum.c @@ -2976,33 +2976,31 @@ big_fdiv(VALUE x, VALUE y) switch (TYPE(y)) { case T_FIXNUM: y = rb_int2big(FIX2LONG(y)); - case T_BIGNUM: { + case T_BIGNUM: bigtrunc(y); l = RBIGNUM_LEN(y) - 1; ey = l * BITSPERDIG; ey += bdigbitsize(BDIGITS(y)[l]); ey -= DBL_BIGDIG * BITSPERDIG; if (ey) y = big_shift(y, ey); - bignum: - bigdivrem(x, y, &z, 0); - l = ex - ey; -#if SIZEOF_LONG > SIZEOF_INT - { - /* Visual C++ can't be here */ - if (l > INT_MAX) return DBL2NUM(INFINITY); - if (l < INT_MIN) return DBL2NUM(0.0); - } -#endif - return DBL2NUM(ldexp(big2dbl(z), (int)l)); - } + break; case T_FLOAT: y = dbl2big(ldexp(frexp(RFLOAT_VALUE(y), &i), DBL_MANT_DIG)); ey = i - DBL_MANT_DIG; - goto bignum; + break; + default: + rb_bug("big_fdiv"); } - rb_bug("big_fdiv"); - - UNREACHABLE; + bigdivrem(x, y, &z, 0); + l = ex - ey; +#if SIZEOF_LONG > SIZEOF_INT + { + /* Visual C++ can't be here */ + if (l > INT_MAX) return DBL2NUM(INFINITY); + if (l < INT_MIN) return DBL2NUM(0.0); + } +#endif + return DBL2NUM(ldexp(big2dbl(z), (int)l)); } /* @@ -3665,17 +3663,13 @@ static VALUE rb_big_coerce(VALUE x, VALUE y) { if (FIXNUM_P(y)) { - return rb_assoc_new(rb_int2big(FIX2LONG(y)), x); - } - else if (RB_TYPE_P(y, T_BIGNUM)) { - return rb_assoc_new(y, x); + y = rb_int2big(FIX2LONG(y)); } - else { + else if (!RB_TYPE_P(y, T_BIGNUM)) { rb_raise(rb_eTypeError, "can't coerce %s to Bignum", rb_obj_classname(y)); } - - UNREACHABLE; + return rb_assoc_new(y, x); } /* diff --git a/class.c b/class.c index 8dc2f2eb5c..00f508e1b4 100644 --- a/class.c +++ b/class.c @@ -1649,15 +1649,12 @@ rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...) } va_end(vargs); - if (argi < argc) - goto argc_error; + if (argi < argc) { + argc_error: + rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt); + } return argc; - - argc_error: - rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt); - - UNREACHABLE; } /*! diff --git a/dir.c b/dir.c index e2304a69f4..8476c0e1d3 100644 --- a/dir.c +++ b/dir.c @@ -584,14 +584,10 @@ dir_read(VALUE dir) if (READDIR(dirp->dir, dirp->enc, &STRUCT_DIRENT(entry), dp)) { return rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc); } - else if (errno == 0) { /* end of stream */ - return Qnil; - } else { - rb_sys_fail(0); + if (errno != 0) rb_sys_fail(0); + return Qnil; /* end of stream */ } - - UNREACHABLE; } /* diff --git a/encoding.c b/encoding.c index f2506b3412..41f217063b 100644 --- a/encoding.c +++ b/encoding.c @@ -922,14 +922,11 @@ rb_enc_codepoint_len(const char *p, const char *e, int *len_p, rb_encoding *enc) if (e <= p) rb_raise(rb_eArgError, "empty string"); r = rb_enc_precise_mbclen(p, e, enc); - if (MBCLEN_CHARFOUND_P(r)) { - if (len_p) *len_p = MBCLEN_CHARFOUND_LEN(r); - return rb_enc_mbc_to_codepoint(p, e, enc); - } - else + if (!MBCLEN_CHARFOUND_P(r)) { rb_raise(rb_eArgError, "invalid byte sequence in %s", rb_enc_name(enc)); - - UNREACHABLE; + } + if (len_p) *len_p = MBCLEN_CHARFOUND_LEN(r); + return rb_enc_mbc_to_codepoint(p, e, enc); } #undef rb_enc_codepoint diff --git a/ext/pty/pty.c b/ext/pty/pty.c index de5cbf79e2..126e33c8a6 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -630,6 +630,7 @@ pty_getpty(int argc, VALUE *argv, VALUE self) return res; } +NORETURN(static void raise_from_check(pid_t pid, int status)); static void raise_from_check(pid_t pid, int status) { diff --git a/file.c b/file.c index 1c31086d26..59de83c5fd 100644 --- a/file.c +++ b/file.c @@ -4182,13 +4182,8 @@ test_check(int n, int argc, VALUE *argv) n+=1; rb_check_arity(argc, n, n); for (i=1; isymbols, num, &id)) { - return (ID)id; + if (!st_lookup(arg->symbols, num, &id)) { + rb_raise(rb_eArgError, "bad symbol"); } - rb_raise(rb_eArgError, "bad symbol"); - - UNREACHABLE; + return (ID)id; } static ID @@ -1181,6 +1179,8 @@ r_symbol(struct load_arg *arg) again: switch ((type = r_byte(arg))) { + default: + rb_raise(rb_eArgError, "dump format error for symbol(0x%x)", type); case TYPE_IVAR: ivar = 1; goto again; @@ -1191,12 +1191,7 @@ r_symbol(struct load_arg *arg) rb_raise(rb_eArgError, "dump format error (symlink with encoding)"); } return r_symlink(arg); - default: - rb_raise(rb_eArgError, "dump format error for symbol(0x%x)", type); - break; } - - UNREACHABLE; } static VALUE diff --git a/numeric.c b/numeric.c index 03abf6db8f..8d2500abfb 100644 --- a/numeric.c +++ b/numeric.c @@ -2109,11 +2109,11 @@ rb_num2ll(VALUE val) break; default: - val = rb_to_int(val); - return NUM2LL(val); + break; } - UNREACHABLE; + val = rb_to_int(val); + return NUM2LL(val); } unsigned LONG_LONG @@ -2153,11 +2153,11 @@ rb_num2ull(VALUE val) break; default: - val = rb_to_int(val); - return NUM2ULL(val); + break; } - UNREACHABLE; + val = rb_to_int(val); + return NUM2ULL(val); } #endif /* HAVE_LONG_LONG */ diff --git a/ruby.c b/ruby.c index 31385e4310..93779a76e2 100644 --- a/ruby.c +++ b/ruby.c @@ -1756,9 +1756,9 @@ opt_W_getter(ID id, void *data) return INT2FIX(1); case Qtrue: return INT2FIX(2); + default: + return Qnil; } - - UNREACHABLE; } void diff --git a/win32/win32.c b/win32/win32.c index 5437cb6c38..84c929d371 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -1071,17 +1071,13 @@ child_result(struct ChildRecord *child, int mode) return -1; } - switch (mode) { - case P_NOWAIT: - return child->pid; - case P_OVERLAY: + if (mode == P_OVERLAY) { WaitForSingleObject(child->hProcess, INFINITE); GetExitCodeProcess(child->hProcess, &exitcode); CloseChildHandle(child); _exit(exitcode); - default: - UNREACHABLE; } + return child->pid; } /* License: Ruby's */ -- cgit v1.2.3