From 3df37259d81d9fc71f8b4f0b8d45dc9d0af81ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= Date: Thu, 29 Aug 2019 11:47:20 +0900 Subject: drop-in type check for rb_define_singleton_method We can check the function pointer passed to rb_define_singleton_method like how we do so in rb_define_method. Doing so revealed many arity mismatches. --- string.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'string.c') diff --git a/string.c b/string.c index 6ec0514ba4..d6ea7d6f91 100644 --- a/string.c +++ b/string.c @@ -11196,6 +11196,28 @@ rb_to_symbol(VALUE name) return rb_str_intern(name); } +/* + * call-seq: + * Symbol.all_symbols => array + * + * Returns an array of all the symbols currently in Ruby's symbol + * table. + * + * Symbol.all_symbols.size #=> 903 + * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, + * :chown, :EOFError, :$;, :String, + * :LOCK_SH, :"setuid?", :$<, + * :default_proc, :compact, :extend, + * :Tms, :getwd, :$=, :ThreadGroup, + * :wait2, :$>] + */ + +static VALUE +sym_all_symbols(VALUE _) +{ + return rb_sym_all_symbols(); +} + /* * A String object holds and manipulates an arbitrary sequence of * bytes, typically representing characters. String objects may be created @@ -11382,7 +11404,7 @@ Init_String(void) rb_include_module(rb_cSymbol, rb_mComparable); rb_undef_alloc_func(rb_cSymbol); rb_undef_method(CLASS_OF(rb_cSymbol), "new"); - rb_define_singleton_method(rb_cSymbol, "all_symbols", rb_sym_all_symbols, 0); /* in symbol.c */ + rb_define_singleton_method(rb_cSymbol, "all_symbols", sym_all_symbols, 0); rb_define_method(rb_cSymbol, "==", sym_equal, 1); rb_define_method(rb_cSymbol, "===", sym_equal, 1); -- cgit v1.2.3