@@ -22,7 +22,14 @@ def mo4(a, *b, &c) end
2222 def mo5 ( a , *b , c ) end
2323 def mo6 ( a , *b , c , &d ) end
2424 def mo7 ( a , b = nil , *c , d , &e ) end
25- def ma1 ( ( a ) , &b ) end
25+ def ma1 ( ( a ) , &b ) nil && a end
26+ def mk1 ( **) end
27+ def mk2 ( **o ) nil && o end
28+ def mk3 ( a , **o ) nil && o end
29+ def mk4 ( a = nil , **o ) nil && o end
30+ def mk5 ( a , b = nil , **o ) nil && o end
31+ def mk6 ( a , b = nil , c , **o ) nil && o end
32+ def mk7 ( a , b = nil , *c , d , **o ) nil && o end
2633
2734 class Base
2835 def foo ( ) :base end
@@ -68,6 +75,13 @@ def test_arity
6875 assert_equal ( -2 , method ( :mo4 ) . arity )
6976 assert_equal ( -3 , method ( :mo5 ) . arity )
7077 assert_equal ( -3 , method ( :mo6 ) . arity )
78+ assert_equal ( -1 , method ( :mk1 ) . arity )
79+ assert_equal ( -1 , method ( :mk2 ) . arity )
80+ assert_equal ( -2 , method ( :mk3 ) . arity )
81+ assert_equal ( -1 , method ( :mk4 ) . arity )
82+ assert_equal ( -2 , method ( :mk5 ) . arity )
83+ assert_equal ( -3 , method ( :mk6 ) . arity )
84+ assert_equal ( -3 , method ( :mk7 ) . arity )
7185 end
7286
7387 def test_arity_special
@@ -293,7 +307,7 @@ def a
293307 end
294308 end
295309
296- assert_nothing_raised do
310+ assert_nothing_raised ( bug8686 ) do
297311 m . define_singleton_method ( :a , m . method ( :a ) )
298312 end
299313 end
@@ -456,7 +470,14 @@ def test_default_accessibility
456470 define_method ( :pmo5 ) { |a , *b , c |}
457471 define_method ( :pmo6 ) { |a , *b , c , &d |}
458472 define_method ( :pmo7 ) { |a , b = nil , *c , d , &e |}
459- define_method ( :pma1 ) { |( a ) , &b |}
473+ define_method ( :pma1 ) { |( a ) , &b | nil && a }
474+ define_method ( :pmk1 ) { |**|}
475+ define_method ( :pmk2 ) { |**o |}
476+ define_method ( :pmk3 ) { |a , **o |}
477+ define_method ( :pmk4 ) { |a = nil , **o |}
478+ define_method ( :pmk5 ) { |a , b = nil , **o |}
479+ define_method ( :pmk6 ) { |a , b = nil , c , **o |}
480+ define_method ( :pmk7 ) { |a , b = nil , *c , d , **o |}
460481
461482 def test_bound_parameters
462483 assert_equal ( [ ] , method ( :m0 ) . parameters )
@@ -470,6 +491,13 @@ def test_bound_parameters
470491 assert_equal ( [ [ :req , :a ] , [ :rest , :b ] , [ :req , :c ] , [ :block , :d ] ] , method ( :mo6 ) . parameters )
471492 assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :block , :e ] ] , method ( :mo7 ) . parameters )
472493 assert_equal ( [ [ :req ] , [ :block , :b ] ] , method ( :ma1 ) . parameters )
494+ assert_equal ( [ [ :keyrest ] ] , method ( :mk1 ) . parameters )
495+ assert_equal ( [ [ :keyrest , :o ] ] , method ( :mk2 ) . parameters )
496+ assert_equal ( [ [ :req , :a ] , [ :keyrest , :o ] ] , method ( :mk3 ) . parameters )
497+ assert_equal ( [ [ :opt , :a ] , [ :keyrest , :o ] ] , method ( :mk4 ) . parameters )
498+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :keyrest , :o ] ] , method ( :mk5 ) . parameters )
499+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :req , :c ] , [ :keyrest , :o ] ] , method ( :mk6 ) . parameters )
500+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :keyrest , :o ] ] , method ( :mk7 ) . parameters )
473501 end
474502
475503 def test_unbound_parameters
@@ -484,6 +512,13 @@ def test_unbound_parameters
484512 assert_equal ( [ [ :req , :a ] , [ :rest , :b ] , [ :req , :c ] , [ :block , :d ] ] , self . class . instance_method ( :mo6 ) . parameters )
485513 assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :block , :e ] ] , self . class . instance_method ( :mo7 ) . parameters )
486514 assert_equal ( [ [ :req ] , [ :block , :b ] ] , self . class . instance_method ( :ma1 ) . parameters )
515+ assert_equal ( [ [ :keyrest ] ] , self . class . instance_method ( :mk1 ) . parameters )
516+ assert_equal ( [ [ :keyrest , :o ] ] , self . class . instance_method ( :mk2 ) . parameters )
517+ assert_equal ( [ [ :req , :a ] , [ :keyrest , :o ] ] , self . class . instance_method ( :mk3 ) . parameters )
518+ assert_equal ( [ [ :opt , :a ] , [ :keyrest , :o ] ] , self . class . instance_method ( :mk4 ) . parameters )
519+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :keyrest , :o ] ] , self . class . instance_method ( :mk5 ) . parameters )
520+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :req , :c ] , [ :keyrest , :o ] ] , self . class . instance_method ( :mk6 ) . parameters )
521+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :keyrest , :o ] ] , self . class . instance_method ( :mk7 ) . parameters )
487522 end
488523
489524 def test_bmethod_bound_parameters
@@ -498,6 +533,13 @@ def test_bmethod_bound_parameters
498533 assert_equal ( [ [ :req , :a ] , [ :rest , :b ] , [ :req , :c ] , [ :block , :d ] ] , method ( :pmo6 ) . parameters )
499534 assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :block , :e ] ] , method ( :pmo7 ) . parameters )
500535 assert_equal ( [ [ :req ] , [ :block , :b ] ] , method ( :pma1 ) . parameters )
536+ assert_equal ( [ [ :keyrest ] ] , method ( :pmk1 ) . parameters )
537+ assert_equal ( [ [ :keyrest , :o ] ] , method ( :pmk2 ) . parameters )
538+ assert_equal ( [ [ :req , :a ] , [ :keyrest , :o ] ] , method ( :pmk3 ) . parameters )
539+ assert_equal ( [ [ :opt , :a ] , [ :keyrest , :o ] ] , method ( :pmk4 ) . parameters )
540+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :keyrest , :o ] ] , method ( :pmk5 ) . parameters )
541+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :req , :c ] , [ :keyrest , :o ] ] , method ( :pmk6 ) . parameters )
542+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :keyrest , :o ] ] , method ( :pmk7 ) . parameters )
501543 end
502544
503545 def test_bmethod_unbound_parameters
@@ -512,6 +554,14 @@ def test_bmethod_unbound_parameters
512554 assert_equal ( [ [ :req , :a ] , [ :rest , :b ] , [ :req , :c ] , [ :block , :d ] ] , self . class . instance_method ( :pmo6 ) . parameters )
513555 assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :block , :e ] ] , self . class . instance_method ( :pmo7 ) . parameters )
514556 assert_equal ( [ [ :req ] , [ :block , :b ] ] , self . class . instance_method ( :pma1 ) . parameters )
557+ assert_equal ( [ [ :req ] , [ :block , :b ] ] , self . class . instance_method ( :pma1 ) . parameters )
558+ assert_equal ( [ [ :keyrest ] ] , self . class . instance_method ( :pmk1 ) . parameters )
559+ assert_equal ( [ [ :keyrest , :o ] ] , self . class . instance_method ( :pmk2 ) . parameters )
560+ assert_equal ( [ [ :req , :a ] , [ :keyrest , :o ] ] , self . class . instance_method ( :pmk3 ) . parameters )
561+ assert_equal ( [ [ :opt , :a ] , [ :keyrest , :o ] ] , self . class . instance_method ( :pmk4 ) . parameters )
562+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :keyrest , :o ] ] , self . class . instance_method ( :pmk5 ) . parameters )
563+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :req , :c ] , [ :keyrest , :o ] ] , self . class . instance_method ( :pmk6 ) . parameters )
564+ assert_equal ( [ [ :req , :a ] , [ :opt , :b ] , [ :rest , :c ] , [ :req , :d ] , [ :keyrest , :o ] ] , self . class . instance_method ( :pmk7 ) . parameters )
515565 end
516566
517567 def test_public_method_with_zsuper_method
@@ -659,6 +709,7 @@ def foo
659709 prepend m
660710 }
661711 assert_raise ( NameError , bug7988 ) { Module . new { prepend m } . instance_method ( :bar ) }
712+ true || c || bug7836
662713 end
663714
664715 def test_gced_bmethod
0 commit comments