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

ruby-changes:56571

From: Nobuyoshi <ko1@a...>
Date: Tue, 16 Jul 2019 09:22:16 +0900 (JST)
Subject: [ruby-changes:56571] Nobuyoshi Nakada: 00dc0dae0d (master): Removed intermediate local variables

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

From 00dc0dae0d7b247a917f5b676a777db86cdf1f3a Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Tue, 16 Jul 2019 08:48:57 +0900
Subject: Removed intermediate local variables


diff --git a/class.c b/class.c
index 6c71ec8..e3f4f52 100644
--- a/class.c
+++ b/class.c
@@ -1871,8 +1871,8 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V https://github.com/ruby/ruby/blob/trunk/class.c#L1871
 
 #define extract_kwarg(keyword, val) \
     (key = (st_data_t)(keyword), values ? \
-     rb_hash_stlike_delete(keyword_hash, &key, (val)) : \
-     rb_hash_stlike_lookup(keyword_hash, key, (val)))
+     (rb_hash_stlike_delete(keyword_hash, &key, &(val)) || ((val) = Qundef, 0)) : \
+     rb_hash_stlike_lookup(keyword_hash, key, NULL))
 
     if (NIL_P(keyword_hash)) keyword_hash = 0;
 
@@ -1880,18 +1880,11 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V https://github.com/ruby/ruby/blob/trunk/class.c#L1880
 	rest = 1;
 	optional = -1-optional;
     }
-    if (values) {
-	for (j = 0; j < required + optional; j++) {
-	    values[j] = Qundef;
-	}
-    }
     if (required) {
 	for (; i < required; i++) {
 	    VALUE keyword = ID2SYM(table[i]);
 	    if (keyword_hash) {
-		st_data_t val;
-		if (extract_kwarg(keyword, &val)) {
-		    if (values) values[i] = (VALUE)val;
+		if (extract_kwarg(keyword, values[i])) {
 		    continue;
 		}
 	    }
@@ -1905,9 +1898,7 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V https://github.com/ruby/ruby/blob/trunk/class.c#L1898
     j = i;
     if (optional && keyword_hash) {
 	for (i = 0; i < optional; i++) {
-	    st_data_t val;
-	    if (extract_kwarg(ID2SYM(table[required+i]), &val)) {
-		if (values) values[required+i] = (VALUE)val;
+	    if (extract_kwarg(ID2SYM(table[required+i]), values[required+i])) {
 		j++;
 	    }
 	}
@@ -1917,6 +1908,11 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V https://github.com/ruby/ruby/blob/trunk/class.c#L1908
 	    unknown_keyword_error(keyword_hash, table, required+optional);
 	}
     }
+    if (values && !keyword_hash) {
+	for (i = 0; i < required + optional; i++) {
+	    values[i] = Qundef;
+	}
+    }
     return j;
 #undef extract_kwarg
 }
-- 
cgit v0.10.2


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

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