Skip to content

Commit 1794cfe

Browse files
committed
Binding#local_variable_defined? raises a NameError for numbered params.
[Bug #21776]
1 parent 5541c0d commit 1794cfe

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

proc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,8 @@ bind_local_variable_defined_p(VALUE bindval, VALUE sym)
641641

642642
if (!lid) return Qfalse;
643643
if (rb_numparam_id_p(lid)) {
644-
return Qfalse;
644+
rb_name_err_raise("numbered parameter '%1$s' is not a local variable",
645+
bindval, ID2SYM(lid));
645646
}
646647

647648
GetBindingPtr(bindval, bind);

test/ruby/test_proc.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1659,35 +1659,35 @@ def test_numparam_is_not_local_variables
16591659
assert_equal([], binding.local_variables)
16601660
assert_raise(NameError) { binding.local_variable_get(:_9) }
16611661
assert_raise(NameError) { binding.local_variable_set(:_9, 1) }
1662-
assert_equal(false, binding.local_variable_defined?(:_9))
1662+
assert_raise(NameError) { binding.local_variable_defined?(:_9) }
16631663
"bar".tap do
16641664
assert_equal([], binding.local_variables)
16651665
assert_raise(NameError) { binding.local_variable_get(:_9) }
16661666
assert_raise(NameError) { binding.local_variable_set(:_9, 1) }
1667-
assert_equal(false, binding.local_variable_defined?(:_9))
1667+
assert_raise(NameError) { binding.local_variable_defined?(:_9) }
16681668
end
16691669
assert_equal([], binding.local_variables)
16701670
assert_raise(NameError) { binding.local_variable_get(:_9) }
16711671
assert_raise(NameError) { binding.local_variable_set(:_9, 1) }
1672-
assert_equal(false, binding.local_variable_defined?(:_9))
1672+
assert_raise(NameError) { binding.local_variable_defined?(:_9) }
16731673
end
16741674

16751675
"foo".tap do
16761676
assert_equal([], binding.local_variables)
16771677
assert_raise(NameError) { binding.local_variable_get(:_9) }
16781678
assert_raise(NameError) { binding.local_variable_set(:_9, 1) }
1679-
assert_equal(false, binding.local_variable_defined?(:_9))
1679+
assert_raise(NameError) { binding.local_variable_defined?(:_9) }
16801680
"bar".tap do
16811681
_9 and flunk
16821682
assert_equal([], binding.local_variables)
16831683
assert_raise(NameError) { binding.local_variable_get(:_9) }
16841684
assert_raise(NameError) { binding.local_variable_set(:_9, 1) }
1685-
assert_equal(false, binding.local_variable_defined?(:_9))
1685+
assert_raise(NameError) { binding.local_variable_defined?(:_9) }
16861686
end
16871687
assert_equal([], binding.local_variables)
16881688
assert_raise(NameError) { binding.local_variable_get(:_9) }
16891689
assert_raise(NameError) { binding.local_variable_set(:_9, 1) }
1690-
assert_equal(false, binding.local_variable_defined?(:_9))
1690+
assert_raise(NameError) { binding.local_variable_defined?(:_9) }
16911691
end
16921692
end
16931693

0 commit comments

Comments
 (0)