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

ruby-changes:62032

From: =E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3 <ko1@a...>
Date: Mon, 29 Jun 2020 11:08:10 +0900 (JST)
Subject: [ruby-changes:62032] 224e9c3835 (master): signm2signo: do not goto into a branch

https://git.ruby-lang.org/ruby.git/commit/?id=224e9c3835

From 224e9c383598a9f09a5fa5736a098be538316311 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?=
 <shyouhei@r...>
Date: Tue, 16 Jun 2020 15:46:30 +0900
Subject: signm2signo: do not goto into a branch

I'm not necessarily against every goto in general, but jumping into a
branch is definitely a bad idea.  Better refactor.

diff --git a/signal.c b/signal.c
index 4e76c75..5361b8c 100644
--- a/signal.c
+++ b/signal.c
@@ -243,23 +243,7 @@ signm2signo(VALUE *sig_ptr, int negative, int exit, int *prefix_ptr) https://github.com/ruby/ruby/blob/trunk/signal.c#L243
 	    prefix += signame_prefix_len;
     }
     if (len <= (long)prefix) {
-      unsupported:
-	if (prefix == signame_prefix_len) {
-	    prefix = 0;
-	}
-	else if (prefix > signame_prefix_len) {
-	    prefix -= signame_prefix_len;
-	    len -= prefix;
-	    vsig = rb_str_subseq(vsig, prefix, len);
-	    prefix = 0;
-	}
-	else {
-	    len -= prefix;
-	    vsig = rb_str_subseq(vsig, prefix, len);
-	    prefix = signame_prefix_len;
-	}
-	rb_raise(rb_eArgError, "unsupported signal `%.*s%"PRIsVALUE"'",
-		 prefix, signame_prefix, vsig);
+        goto unsupported;
     }
 
     if (prefix_ptr) *prefix_ptr = prefix;
@@ -272,7 +256,24 @@ signm2signo(VALUE *sig_ptr, int negative, int exit, int *prefix_ptr) https://github.com/ruby/ruby/blob/trunk/signal.c#L256
 	    return negative ? -sigs->signo : sigs->signo;
 	}
     }
-    goto unsupported;
+
+  unsupported:
+    if (prefix == signame_prefix_len) {
+        prefix = 0;
+    }
+    else if (prefix > signame_prefix_len) {
+        prefix -= signame_prefix_len;
+        len -= prefix;
+        vsig = rb_str_subseq(vsig, prefix, len);
+        prefix = 0;
+    }
+    else {
+        len -= prefix;
+        vsig = rb_str_subseq(vsig, prefix, len);
+        prefix = signame_prefix_len;
+    }
+    rb_raise(rb_eArgError, "unsupported signal `%.*s%"PRIsVALUE"'",
+             prefix, signame_prefix, vsig);
 }
 
 static const char*
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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