ruby-changes:23282
From: nobu <ko1@a...>
Date: Sun, 15 Apr 2012 09:06:25 +0900 (JST)
Subject: [ruby-changes:23282] nobu:r35333 (trunk): * reduce UNREACHABLE.
nobu 2012-04-15 09:06:13 +0900 (Sun, 15 Apr 2012) New Revision: 35333 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35333 Log: * reduce UNREACHABLE. Modified files: trunk/bignum.c trunk/class.c trunk/dir.c trunk/encoding.c trunk/ext/pty/pty.c trunk/file.c trunk/io.c trunk/marshal.c trunk/numeric.c trunk/ruby.c trunk/win32/win32.c Index: encoding.c =================================================================== --- encoding.c (revision 35332) +++ encoding.c (revision 35333) @@ -922,14 +922,11 @@ 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 Index: io.c =================================================================== --- io.c (revision 35332) +++ io.c (revision 35333) @@ -2336,10 +2336,7 @@ ret = io_getpartial(argc, argv, io, 0); if (NIL_P(ret)) rb_eof_error(); - else - return ret; - - UNREACHABLE; + return ret; } /* @@ -2399,10 +2396,7 @@ ret = io_getpartial(argc, argv, io, 1); if (NIL_P(ret)) rb_eof_error(); - else - return ret; - - UNREACHABLE; + return ret; } /* @@ -4437,6 +4431,8 @@ return MODE_BTMODE("a", "ab", "at"); } switch (fmode & FMODE_READWRITE) { + default: + rb_raise(rb_eArgError, "invalid access fmode 0x%x", fmode); case FMODE_READABLE: return MODE_BTMODE("r", "rb", "rt"); case FMODE_WRITABLE: @@ -4447,9 +4443,6 @@ } return MODE_BTMODE("r+", "rb+", "rt+"); } - rb_raise(rb_eArgError, "invalid access fmode 0x%x", fmode); - - UNREACHABLE; } static int @@ -4607,6 +4600,8 @@ } } switch (oflags & (O_RDONLY|O_WRONLY|O_RDWR)) { + default: + rb_raise(rb_eArgError, "invalid access oflags 0x%x", oflags); case O_RDONLY: return MODE_BINARY("r", "rb"); case O_WRONLY: @@ -4614,9 +4609,6 @@ case O_RDWR: return MODE_BINARY("r+", "rb+"); } - rb_raise(rb_eArgError, "invalid access oflags 0x%x", oflags); - - UNREACHABLE; } /* Index: dir.c =================================================================== --- dir.c (revision 35332) +++ dir.c (revision 35333) @@ -584,14 +584,10 @@ 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; } /* Index: win32/win32.c =================================================================== --- win32/win32.c (revision 35332) +++ win32/win32.c (revision 35333) @@ -1071,17 +1071,13 @@ 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 */ Index: class.c =================================================================== --- class.c (revision 35332) +++ class.c (revision 35333) @@ -1649,15 +1649,12 @@ } 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; } /*! Index: ext/pty/pty.c =================================================================== --- ext/pty/pty.c (revision 35332) +++ ext/pty/pty.c (revision 35333) @@ -630,6 +630,7 @@ return res; } +NORETURN(static void raise_from_check(pid_t pid, int status)); static void raise_from_check(pid_t pid, int status) { Index: numeric.c =================================================================== --- numeric.c (revision 35332) +++ numeric.c (revision 35333) @@ -2109,11 +2109,11 @@ 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 @@ break; default: - val = rb_to_int(val); - return NUM2ULL(val); + break; } - UNREACHABLE; + val = rb_to_int(val); + return NUM2ULL(val); } #endif /* HAVE_LONG_LONG */ Index: bignum.c =================================================================== --- bignum.c (revision 35332) +++ bignum.c (revision 35333) @@ -2976,33 +2976,31 @@ 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 @@ rb_big_coerce(VALUE x, VALUE y) { if (FIXNUM_P(y)) { - return rb_assoc_new(rb_int2big(FIX2LONG(y)), x); + y = rb_int2big(FIX2LONG(y)); } - else if (RB_TYPE_P(y, T_BIGNUM)) { - return rb_assoc_new(y, x); - } - 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); } /* Index: ruby.c =================================================================== --- ruby.c (revision 35332) +++ ruby.c (revision 35333) @@ -1756,9 +1756,9 @@ return INT2FIX(1); case Qtrue: return INT2FIX(2); + default: + return Qnil; } - - UNREACHABLE; } void Index: marshal.c =================================================================== --- marshal.c (revision 35332) +++ marshal.c (revision 35333) @@ -1143,12 +1143,10 @@ st_data_t id; long num = r_long(arg); - if (st_lookup(arg->symbols, 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 @@ 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 @@ 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 Index: file.c =================================================================== --- file.c (revision 35332) +++ file.c (revision 35333) @@ -4182,13 +4182,8 @@ n+=1; rb_check_arity(argc, n, n); for (i=1; i<n; i++) { - switch (TYPE(argv[i])) { - case T_STRING: - default: + if (!RB_TYPE_P(argv[i], T_FILE)) { FilePathValue(argv[i]); - break; - case T_FILE: - break; } } } @@ -4260,7 +4255,16 @@ if (argc == 0) rb_check_arity(argc, 2, 3); cmd = NUM2CHR(argv[0]); - if (cmd == 0) goto unknown; + if (cmd == 0) { + unknown: + /* unknown command */ + if (ISPRINT(cmd)) { + rb_raise(rb_eArgError, "unknown command '%s%c'", cmd == '\'' || cmd == '\\' ? "\\" : "", cmd); + } + else { + rb_raise(rb_eArgError, "unknown command \"\\x%02X\"", cmd); + } + } if (strchr("bcdefgGkloOprRsSuwWxXz", cmd)) { CHECK(1); switch (cmd) { @@ -4379,16 +4383,7 @@ return Qfalse; } } - unknown: - /* unknown command */ - if (ISPRINT(cmd)) { - rb_raise(rb_eArgError, "unknown command '%s%c'", cmd == '\'' || cmd == '\\' ? "\\" : "", cmd); - } - else { - rb_raise(rb_eArgError, "unknown command \"\\x%02X\"", cmd); - } - - UNREACHABLE; + goto unknown; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/