Skip to content

Commit 082290a

Browse files
committed
Check that there are no keyword arguments with **nil implicitly
Actually **nil isn't supported yet so no exception is raised now.
1 parent 71bb50d commit 082290a

File tree

6 files changed

+7
-14
lines changed

6 files changed

+7
-14
lines changed

spec/ruby/core/enumerator/product_spec.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
Enumerator.product(1..2) {}.should == nil
4949
end
5050

51+
# https://bugs.ruby-lang.org/issues/19829
5152
it "reject keyword arguments" do
5253
-> {
5354
Enumerator.product(1..3, foo: 1, bar: 2)

spec/ruby/language/method_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,9 +1107,9 @@ def m(a, **nil); a end;
11071107
m({a: 1}).should == {a: 1}
11081108
m({"a" => 1}).should == {"a" => 1}
11091109

1110-
-> { m(a: 1) }.should raise_error(ArgumentError)
1111-
-> { m(**{a: 1}) }.should raise_error(ArgumentError)
1112-
-> { m("a" => 1) }.should raise_error(ArgumentError)
1110+
-> { m(a: 1) }.should raise_error(ArgumentError, 'no keywords accepted')
1111+
-> { m(**{a: 1}) }.should raise_error(ArgumentError, 'no keywords accepted')
1112+
-> { m("a" => 1) }.should raise_error(ArgumentError, 'no keywords accepted')
11131113
end
11141114

11151115
evaluate <<-ruby do
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fails:Enumerator.product reject keyword arguments

spec/tags/language/method_tags.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ fails:kwarg with omitted value in a method call accepts short notation 'kwarg' i
66
fails:"kwarg with omitted value in a method call with methods and local variables for definition \n def call(*args, **kwargs) = [args, kwargs]\n def bar\n "baz"\n end\n def foo(val)\n call bar:, val:\n end"
77
fails:An endless method definition without arguments without parenthesis for definition 'def m = 42'
88
fails:Inside 'endless' method definitions allows method calls without parenthesis
9+
fails:A method assigns local variables from method parameters for definition 'def m(a, **nil); a end;'

src/main/ruby/truffleruby/core/enumerator.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,9 @@ def self.produce(initial = nil)
231231
end
232232
end
233233

234-
def self.product(*enums, **kwargs, &block)
235-
Truffle::KernelOperations.validate_no_kwargs(kwargs)
234+
def self.product(*enums, **nil, &block)
236235
return Product.new(*enums) if Primitive.nil?(block)
237-
238236
Truffle::EnumeratorOperations.product_iterator([], enums, &block)
239-
240237
nil
241238
end
242239

src/main/ruby/truffleruby/core/truffle/kernel_operations.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,6 @@ def self.value_frozen?(value)
242242
KERNEL_FROZEN.bind(value).call
243243
end
244244

245-
def self.validate_no_kwargs(kwargs)
246-
return if (kwargs_size = kwargs.size) == 0
247-
248-
raise ArgumentError, "unknown keyword: #{kwargs.keys.first.inspect}" if kwargs_size == 1
249-
raise ArgumentError, "unknown keywords: #{kwargs.keys.map(&:inspect).join(', ')}"
250-
end
251-
252245
# To get the class even if the value's class does not include `Kernel`, use `Primitive.class`.
253246
end
254247
end

0 commit comments

Comments
 (0)