[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]