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

ruby-changes:56579

From: Nobuyoshi <ko1@a...>
Date: Tue, 16 Jul 2019 21:38:59 +0900 (JST)
Subject: [ruby-changes:56579] Nobuyoshi Nakada: d45d448d71 (master): nil as the default of optional parameters

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

From d45d448d71bfe9db4a71e06289e7b4d640bbd55c Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Tue, 16 Jul 2019 21:38:25 +0900
Subject: nil as the default of optional parameters


diff --git a/process.c b/process.c
index 9fb40aa..f1cd802 100644
--- a/process.c
+++ b/process.c
@@ -1992,6 +1992,7 @@ rb_execarg_addopt_rlimit(struct rb_execarg *eargp, int rtype, VALUE val) https://github.com/ruby/ruby/blob/trunk/process.c#L1992
 }
 #endif
 
+#define TO_BOOL(val, name) NIL_P(val) ? 0 : rb_bool_expected((val), name)
 int
 rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
 {
@@ -2039,7 +2040,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val) https://github.com/ruby/ruby/blob/trunk/process.c#L2040
                 rb_raise(rb_eArgError, "new_pgroup option specified twice");
             }
             eargp->new_pgroup_given = 1;
-            eargp->new_pgroup_flag = rb_bool_expected(val, "new_pgroup");
+            eargp->new_pgroup_flag = TO_BOOL(val, "new_pgroup");
         }
         else
 #endif
@@ -2048,7 +2049,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val) https://github.com/ruby/ruby/blob/trunk/process.c#L2049
                 rb_raise(rb_eArgError, "unsetenv_others option specified twice");
             }
             eargp->unsetenv_others_given = 1;
-            eargp->unsetenv_others_do = rb_bool_expected(val, "unsetenv_others");
+            eargp->unsetenv_others_do = TO_BOOL(val, "unsetenv_others");
         }
         else if (id == id_chdir) {
             if (eargp->chdir_given) {
@@ -2072,7 +2073,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val) https://github.com/ruby/ruby/blob/trunk/process.c#L2073
                 rb_raise(rb_eArgError, "close_others option specified twice");
             }
             eargp->close_others_given = 1;
-            eargp->close_others_do = rb_bool_expected(val, "close_others");
+            eargp->close_others_do = TO_BOOL(val, "close_others");
         }
         else if (id == id_in) {
             key = INT2FIX(0);
@@ -2121,7 +2122,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val) https://github.com/ruby/ruby/blob/trunk/process.c#L2122
                 rb_raise(rb_eArgError, "exception option specified twice");
             }
             eargp->exception_given = 1;
-            eargp->exception = rb_bool_expected(val, "exception");
+            eargp->exception = TO_BOOL(val, "exception");
         }
         else {
 	    return ST_STOP;
@@ -6483,11 +6484,8 @@ proc_daemon(int argc, VALUE *argv) https://github.com/ruby/ruby/blob/trunk/process.c#L6484
     int n, nochdir = FALSE, noclose = FALSE;
 
     switch (rb_check_arity(argc, 0, 2)) {
-      case 2:
-        if (!NIL_P(argv[1])) noclose = rb_bool_expected(argv[1], "noclose");
-        /* fallthrough */
-      case 1:
-        if (!NIL_P(argv[0])) nochdir = rb_bool_expected(argv[0], "nochdir");
+      case 2: noclose = TO_BOOL(argv[1], "noclose");
+      case 1: nochdir = TO_BOOL(argv[0], "nochdir");
     }
 
     prefork();
-- 
cgit v0.10.2


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

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