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

ruby-changes:57813

From: Nobuyoshi <ko1@a...>
Date: Thu, 19 Sep 2019 19:43:58 +0900 (JST)
Subject: [ruby-changes:57813] 2698f13a1f (master): Fixed reserved numbered parameter warning

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

From 2698f13a1f0cc07ef97b7f20502c420b51e9c57d Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Thu, 19 Sep 2019 19:40:44 +0900
Subject: Fixed reserved numbered parameter warning


diff --git a/parse.y b/parse.y
index c4fad93..03db19f 100644
--- a/parse.y
+++ b/parse.y
@@ -170,9 +170,13 @@ struct local_vars { https://github.com/ruby/ruby/blob/trunk/parse.y#L170
 enum {
     ORDINAL_PARAM = -1,
     NO_PARAM = 0,
-    NUMPARAM_MAX = 100,
+    NUMPARAM_MAX = 9,
 };
 
+#define NUMPARAM_ID_P(id) (is_local_id(id) && NUMPARAM_ID_TO_IDX(id) <= NUMPARAM_MAX)
+#define NUMPARAM_ID_TO_IDX(id) (unsigned int)(((id) >> ID_SCOPE_SHIFT) - tNUMPARAM_0)
+#define NUMPARAM_IDX_TO_ID(idx) TOKEN2LOCALID((tNUMPARAM_0 + (idx)))
+
 #define DVARS_INHERIT ((void*)1)
 #define DVARS_TOPSCOPE NULL
 #define DVARS_TERMINAL_P(tbl) ((tbl) == DVARS_INHERIT || (tbl) == DVARS_TOPSCOPE)
@@ -11705,9 +11709,9 @@ arg_var(struct parser_params *p, ID id) https://github.com/ruby/ruby/blob/trunk/parse.y#L11709
 static void
 local_var(struct parser_params *p, ID id)
 {
-    if (id >= idNUMPARAM_0 && id <= idNUMPARAM_9) {
+    if (NUMPARAM_ID_P(id)) {
 	rb_warn1("`_%d' is used as numbered parameter",
-		 WARN_I((int)(id - idNUMPARAM_0)));
+		 WARN_I(NUMPARAM_ID_TO_IDX(id)));
     }
     vtable_add(p->lvtbl->vars, id);
     if (p->lvtbl->used) {
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index ec6fc25..6209bb3 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -1459,6 +1459,7 @@ eom https://github.com/ruby/ruby/blob/trunk/test/ruby/test_syntax.rb#L1459
     assert_syntax_error('proc {@1_}', /unexpected/)
     assert_syntax_error('proc {@9999999999999999}', /too large/)
     assert_syntax_error('@1', /outside block/)
+    assert_warn(/`_2' is used as numbered parameter/) {eval('_2=1')}
   end
 
   def test_value_expr_in_condition
-- 
cgit v0.10.2


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

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