1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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.
This commit is contained in:
卜部昌平 2019-08-29 11:47:20 +09:00
parent bfe5d22f89
commit 3df37259d8
16 changed files with 270 additions and 151 deletions

View file

@ -1746,6 +1746,9 @@ rb_singleton_class(VALUE obj)
* \{
*/
#ifdef rb_define_singleton_method
#undef rb_define_singleton_method
#endif
/*!
* Defines a singleton method for \a obj.
* \param obj an arbitrary object

4
eval.c
View file

@ -355,7 +355,7 @@ ruby_exec_node(void *n)
*/
static VALUE
rb_mod_nesting(void)
rb_mod_nesting(VALUE _)
{
VALUE ary = rb_ary_new();
const rb_cref_t *cref = rb_vm_cref();
@ -1614,7 +1614,7 @@ used_modules_i(VALUE _, VALUE mod, VALUE ary)
* [B, A]
*/
static VALUE
rb_mod_s_used_modules(void)
rb_mod_s_used_modules(VALUE _)
{
const rb_cref_t *cref = rb_vm_cref();
VALUE ary = rb_ary_new();

View file

@ -1382,7 +1382,7 @@ readline_s_set_basic_word_break_characters(VALUE self, VALUE str)
* Raises NotImplementedError if the using readline library does not support.
*/
static VALUE
readline_s_get_basic_word_break_characters(VALUE self, VALUE str)
readline_s_get_basic_word_break_characters(VALUE self)
{
if (rl_basic_word_break_characters == NULL)
return Qnil;
@ -1437,7 +1437,7 @@ readline_s_set_completer_word_break_characters(VALUE self, VALUE str)
* Raises NotImplementedError if the using readline library does not support.
*/
static VALUE
readline_s_get_completer_word_break_characters(VALUE self, VALUE str)
readline_s_get_completer_word_break_characters(VALUE self)
{
if (rl_completer_word_break_characters == NULL)
return Qnil;
@ -1552,7 +1552,7 @@ readline_s_set_basic_quote_characters(VALUE self, VALUE str)
* Raises NotImplementedError if the using readline library does not support.
*/
static VALUE
readline_s_get_basic_quote_characters(VALUE self, VALUE str)
readline_s_get_basic_quote_characters(VALUE self)
{
if (rl_basic_quote_characters == NULL)
return Qnil;
@ -1608,7 +1608,7 @@ readline_s_set_completer_quote_characters(VALUE self, VALUE str)
* Raises NotImplementedError if the using readline library does not support.
*/
static VALUE
readline_s_get_completer_quote_characters(VALUE self, VALUE str)
readline_s_get_completer_quote_characters(VALUE self)
{
if (rl_completer_quote_characters == NULL)
return Qnil;
@ -1662,7 +1662,7 @@ readline_s_set_filename_quote_characters(VALUE self, VALUE str)
* Raises NotImplementedError if the using readline library does not support.
*/
static VALUE
readline_s_get_filename_quote_characters(VALUE self, VALUE str)
readline_s_get_filename_quote_characters(VALUE self)
{
if (rl_filename_quote_characters == NULL)
return Qnil;

View file

@ -672,7 +672,7 @@ bsock_recv_nonblock(VALUE sock, VALUE len, VALUE flg, VALUE str, VALUE ex)
* BasicSocket.do_not_reverse_lookup #=> false
*/
static VALUE
bsock_do_not_rev_lookup(void)
bsock_do_not_rev_lookup(VALUE _)
{
return rsock_do_not_reverse_lookup?Qtrue:Qfalse;
}

View file

@ -1042,7 +1042,7 @@ sock_s_gethostbyname(VALUE obj, VALUE host)
*
*/
static VALUE
sock_s_gethostbyaddr(int argc, VALUE *argv)
sock_s_gethostbyaddr(int argc, VALUE *argv, VALUE _)
{
VALUE addr, family;
struct hostent *h;
@ -1104,7 +1104,7 @@ sock_s_gethostbyaddr(int argc, VALUE *argv)
* Socket.getservbyname("syslog", "udp") #=> 514
*/
static VALUE
sock_s_getservbyname(int argc, VALUE *argv)
sock_s_getservbyname(int argc, VALUE *argv, VALUE _)
{
VALUE service, proto;
struct servent *sp;
@ -1145,7 +1145,7 @@ sock_s_getservbyname(int argc, VALUE *argv)
*
*/
static VALUE
sock_s_getservbyport(int argc, VALUE *argv)
sock_s_getservbyport(int argc, VALUE *argv, VALUE _)
{
VALUE port, proto;
struct servent *sp;
@ -1203,7 +1203,7 @@ sock_s_getservbyport(int argc, VALUE *argv)
* If Addrinfo object is preferred, use Addrinfo.getaddrinfo.
*/
static VALUE
sock_s_getaddrinfo(int argc, VALUE *argv)
sock_s_getaddrinfo(int argc, VALUE *argv, VALUE _)
{
VALUE host, port, family, socktype, protocol, flags, ret, revlookup;
struct addrinfo hints;
@ -1257,7 +1257,7 @@ sock_s_getaddrinfo(int argc, VALUE *argv)
* If Addrinfo object is preferred, use Addrinfo#getnameinfo.
*/
static VALUE
sock_s_getnameinfo(int argc, VALUE *argv)
sock_s_getnameinfo(int argc, VALUE *argv, VALUE _)
{
VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags, tmp;
char *hptr, *pptr;

52
file.c
View file

@ -2538,7 +2538,7 @@ chmod_internal(const char *path, void *mode)
*/
static VALUE
rb_file_s_chmod(int argc, VALUE *argv)
rb_file_s_chmod(int argc, VALUE *argv, VALUE _)
{
mode_t mode;
@ -2610,7 +2610,7 @@ lchmod_internal(const char *path, void *mode)
*/
static VALUE
rb_file_s_lchmod(int argc, VALUE *argv)
rb_file_s_lchmod(int argc, VALUE *argv, VALUE _)
{
mode_t mode;
@ -2669,7 +2669,7 @@ chown_internal(const char *path, void *arg)
*/
static VALUE
rb_file_s_chown(int argc, VALUE *argv)
rb_file_s_chown(int argc, VALUE *argv, VALUE _)
{
struct chown_args arg;
@ -2741,7 +2741,7 @@ lchown_internal(const char *path, void *arg)
*/
static VALUE
rb_file_s_lchown(int argc, VALUE *argv)
rb_file_s_lchown(int argc, VALUE *argv, VALUE _)
{
struct chown_args arg;
@ -2919,7 +2919,7 @@ utime_internal_i(int argc, VALUE *argv, int follow)
*/
static VALUE
rb_file_s_utime(int argc, VALUE *argv)
rb_file_s_utime(int argc, VALUE *argv, VALUE _)
{
return utime_internal_i(argc, argv, FALSE);
}
@ -2938,7 +2938,7 @@ rb_file_s_utime(int argc, VALUE *argv)
*/
static VALUE
rb_file_s_lutime(int argc, VALUE *argv)
rb_file_s_lutime(int argc, VALUE *argv, VALUE _)
{
return utime_internal_i(argc, argv, TRUE);
}
@ -3217,7 +3217,7 @@ rb_file_s_rename(VALUE klass, VALUE from, VALUE to)
*/
static VALUE
rb_file_s_umask(int argc, VALUE *argv)
rb_file_s_umask(int argc, VALUE *argv, VALUE _)
{
mode_t omask = 0;
@ -4032,6 +4032,13 @@ rb_file_expand_path_fast(VALUE fname, VALUE dname)
return expand_path(fname, dname, 0, 0, EXPAND_PATH_BUFFER());
}
VALUE
rb_file_s_expand_path(int argc, const VALUE *argv)
{
rb_check_arity(argc, 1, 2);
return rb_file_expand_path(argv[0], argc > 1 ? argv[1] : Qnil);
}
/*
* call-seq:
* File.expand_path(file_name [, dir_string] ) -> abs_file_name
@ -4060,11 +4067,10 @@ rb_file_expand_path_fast(VALUE fname, VALUE dname)
* parent, the root of the project and appends +lib/mygem.rb+.
*/
VALUE
rb_file_s_expand_path(int argc, const VALUE *argv)
static VALUE
s_expand_path(int c, const VALUE * v, VALUE _)
{
rb_check_arity(argc, 1, 2);
return rb_file_expand_path(argv[0], argc > 1 ? argv[1] : Qnil);
return rb_file_s_expand_path(c, v);
}
VALUE
@ -4074,6 +4080,13 @@ rb_file_absolute_path(VALUE fname, VALUE dname)
return expand_path(fname, dname, 1, 1, EXPAND_PATH_BUFFER());
}
VALUE
rb_file_s_absolute_path(int argc, const VALUE *argv)
{
rb_check_arity(argc, 1, 2);
return rb_file_absolute_path(argv[0], argc > 1 ? argv[1] : Qnil);
}
/*
* call-seq:
* File.absolute_path(file_name [, dir_string] ) -> abs_file_name
@ -4087,11 +4100,10 @@ rb_file_absolute_path(VALUE fname, VALUE dname)
* File.absolute_path("~oracle/bin") #=> "<relative_path>/~oracle/bin"
*/
VALUE
rb_file_s_absolute_path(int argc, const VALUE *argv)
static VALUE
s_absolute_path(int c, const VALUE * v, VALUE _)
{
rb_check_arity(argc, 1, 2);
return rb_file_absolute_path(argv[0], argc > 1 ? argv[1] : Qnil);
return rb_file_s_absolute_path(c, v);
}
enum rb_realpath_mode {
@ -4556,7 +4568,7 @@ ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encodin
*/
static VALUE
rb_file_s_basename(int argc, VALUE *argv)
rb_file_s_basename(int argc, VALUE *argv, VALUE _)
{
VALUE fname, fext, basename;
const char *name, *p;
@ -4800,7 +4812,7 @@ static VALUE
rb_file_s_split(VALUE klass, VALUE path)
{
FilePathStringValue(path); /* get rid of converting twice */
return rb_assoc_new(rb_file_dirname(path), rb_file_s_basename(1,&path));
return rb_assoc_new(rb_file_dirname(path), rb_file_s_basename(1,&path,Qundef));
}
static VALUE
@ -6032,7 +6044,7 @@ nogvl_mkfifo(void *ptr)
*/
static VALUE
rb_file_s_mkfifo(int argc, VALUE *argv)
rb_file_s_mkfifo(int argc, VALUE *argv, VALUE _)
{
VALUE path;
struct mkfifo_arg ma;
@ -6490,8 +6502,8 @@ Init_File(void)
rb_define_singleton_method(rb_cFile, "umask", rb_file_s_umask, -1);
rb_define_singleton_method(rb_cFile, "truncate", rb_file_s_truncate, 2);
rb_define_singleton_method(rb_cFile, "mkfifo", rb_file_s_mkfifo, -1);
rb_define_singleton_method(rb_cFile, "expand_path", rb_file_s_expand_path, -1);
rb_define_singleton_method(rb_cFile, "absolute_path", rb_file_s_absolute_path, -1);
rb_define_singleton_method(rb_cFile, "expand_path", s_expand_path, -1);
rb_define_singleton_method(rb_cFile, "absolute_path", s_absolute_path, -1);
rb_define_singleton_method(rb_cFile, "realpath", rb_file_s_realpath, -1);
rb_define_singleton_method(rb_cFile, "realdirpath", rb_file_s_realdirpath, -1);
rb_define_singleton_method(rb_cFile, "basename", rb_file_s_basename, -1);

52
gc.c
View file

@ -9108,6 +9108,16 @@ gc_stress_set_m(VALUE self, VALUE flag)
return flag;
}
VALUE
rb_gc_enable(void)
{
rb_objspace_t *objspace = &rb_objspace;
int old = dont_gc;
dont_gc = FALSE;
return old ? Qtrue : Qfalse;
}
/*
* call-seq:
* GC.enable -> true or false
@ -9120,15 +9130,10 @@ gc_stress_set_m(VALUE self, VALUE flag)
* GC.enable #=> false
*
*/
VALUE
rb_gc_enable(void)
static VALUE
gc_enable(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
int old = dont_gc;
dont_gc = FALSE;
return old ? Qtrue : Qfalse;
return rb_gc_enable();
}
VALUE
@ -9140,6 +9145,15 @@ rb_gc_disable_no_rest(void)
return old ? Qtrue : Qfalse;
}
VALUE
rb_gc_disable(void)
{
rb_objspace_t *objspace = &rb_objspace;
gc_rest(objspace);
return rb_gc_disable_no_rest();
}
/*
* call-seq:
* GC.disable -> true or false
@ -9152,12 +9166,10 @@ rb_gc_disable_no_rest(void)
*
*/
VALUE
rb_gc_disable(void)
static VALUE
gc_disable(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
gc_rest(objspace);
return rb_gc_disable_no_rest();
return rb_gc_disable();
}
static int
@ -10794,7 +10806,7 @@ gc_prof_set_heap_info(rb_objspace_t *objspace)
*/
static VALUE
gc_profile_clear(void)
gc_profile_clear(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
void *p = objspace->profile.records;
@ -10859,7 +10871,7 @@ gc_profile_clear(void)
*/
static VALUE
gc_profile_record_get(void)
gc_profile_record_get(VALUE _)
{
VALUE prof;
VALUE gc_profile = rb_ary_new();
@ -11046,7 +11058,7 @@ gc_profile_dump_on(VALUE out, VALUE (*append)(VALUE, VALUE))
*/
static VALUE
gc_profile_result(void)
gc_profile_result(VALUE _)
{
VALUE str = rb_str_buf_new(0);
gc_profile_dump_on(str, rb_str_buf_append);
@ -11120,7 +11132,7 @@ gc_profile_enable_get(VALUE self)
*/
static VALUE
gc_profile_enable(void)
gc_profile_enable(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
objspace->profile.run = TRUE;
@ -11137,7 +11149,7 @@ gc_profile_enable(void)
*/
static VALUE
gc_profile_disable(void)
gc_profile_disable(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
@ -11669,8 +11681,8 @@ Init_GC(void)
rb_mGC = rb_define_module("GC");
rb_define_singleton_method(rb_mGC, "start", gc_start_internal, -1);
rb_define_singleton_method(rb_mGC, "enable", rb_gc_enable, 0);
rb_define_singleton_method(rb_mGC, "disable", rb_gc_disable, 0);
rb_define_singleton_method(rb_mGC, "enable", gc_enable, 0);
rb_define_singleton_method(rb_mGC, "disable", gc_disable, 0);
rb_define_singleton_method(rb_mGC, "stress", gc_stress_get, 0);
rb_define_singleton_method(rb_mGC, "stress=", gc_stress_set_m, 1);
rb_define_singleton_method(rb_mGC, "count", gc_count, 0);

111
hash.c
View file

@ -4808,7 +4808,7 @@ rb_f_getenv(VALUE obj, VALUE name)
* be returned when no block is given.
*/
static VALUE
env_fetch(int argc, VALUE *argv)
env_fetch(int argc, VALUE *argv, VALUE _)
{
VALUE key;
long block_given;
@ -5138,12 +5138,6 @@ env_aset(VALUE nm, VALUE val)
return val;
}
/*
* call-seq:
* ENV.keys -> Array
*
* Returns every environment variable name in an Array
*/
static VALUE
env_keys(void)
{
@ -5163,6 +5157,19 @@ env_keys(void)
return ary;
}
/*
* call-seq:
* ENV.keys -> Array
*
* Returns every environment variable name in an Array
*/
static VALUE
env_f_keys(VALUE _)
{
return env_keys();
}
static VALUE
rb_env_size(VALUE ehash, VALUE args, VALUE eobj)
{
@ -5202,12 +5209,6 @@ env_each_key(VALUE ehash)
return ehash;
}
/*
* call-seq:
* ENV.values -> Array
*
* Returns every environment variable value as an Array
*/
static VALUE
env_values(void)
{
@ -5227,6 +5228,19 @@ env_values(void)
return ary;
}
/*
* call-seq:
* ENV.values -> Array
*
* Returns every environment variable value as an Array
*/
static VALUE
env_f_values(VALUE _)
{
return env_values();
}
/*
* call-seq:
* ENV.each_value { |value| block } -> Hash
@ -5354,7 +5368,7 @@ env_delete_if(VALUE ehash)
* the given names. See also ENV.select.
*/
static VALUE
env_values_at(int argc, VALUE *argv)
env_values_at(int argc, VALUE *argv, VALUE _)
{
VALUE result;
long i;
@ -5465,7 +5479,7 @@ env_keep_if(VALUE ehash)
* ENV.slice("TERM","HOME") #=> {"TERM"=>"xterm-256color", "HOME"=>"/Users/rhc"}
*/
static VALUE
env_slice(int argc, VALUE *argv)
env_slice(int argc, VALUE *argv, VALUE _)
{
int i;
VALUE key, value, result;
@ -5485,12 +5499,6 @@ env_slice(int argc, VALUE *argv)
return result;
}
/*
* call-seq:
* ENV.clear
*
* Removes every environment variable.
*/
VALUE
rb_env_clear(void)
{
@ -5508,6 +5516,18 @@ rb_env_clear(void)
return envtbl;
}
/*
* call-seq:
* ENV.clear
*
* Removes every environment variable.
*/
static VALUE
env_clear(VALUE _)
{
return rb_env_clear();
}
/*
* call-seq:
* ENV.to_s -> "ENV"
@ -5515,7 +5535,7 @@ rb_env_clear(void)
* Returns "ENV"
*/
static VALUE
env_to_s(void)
env_to_s(VALUE _)
{
return rb_usascii_str_new2("ENV");
}
@ -5527,7 +5547,7 @@ env_to_s(void)
* Returns the contents of the environment as a String.
*/
static VALUE
env_inspect(void)
env_inspect(VALUE _)
{
char **env;
VALUE str, i;
@ -5566,7 +5586,7 @@ env_inspect(void)
*
*/
static VALUE
env_to_a(void)
env_to_a(VALUE _)
{
char **env;
VALUE ary;
@ -5593,7 +5613,7 @@ env_to_a(void)
* compatibility with Hash.
*/
static VALUE
env_none(void)
env_none(VALUE _)
{
return Qnil;
}
@ -5606,7 +5626,7 @@ env_none(void)
* Returns the number of environment variables.
*/
static VALUE
env_size(void)
env_size(VALUE _)
{
int i;
char **env;
@ -5625,7 +5645,7 @@ env_size(void)
* Returns true when there are no environment variables
*/
static VALUE
env_empty_p(void)
env_empty_p(VALUE _)
{
char **env;
@ -5782,13 +5802,6 @@ env_index(VALUE dmy, VALUE value)
return env_key(dmy, value);
}
/*
* call-seq:
* ENV.to_hash -> hash
*
* Creates a hash with a copy of the environment variables.
*
*/
static VALUE
env_to_hash(void)
{
@ -5809,6 +5822,20 @@ env_to_hash(void)
return hash;
}
/*
* call-seq:
* ENV.to_hash -> hash
*
* Creates a hash with a copy of the environment variables.
*
*/
static VALUE
env_f_to_hash(VALUE _)
{
return env_to_hash();
}
/*
* call-seq:
* ENV.to_h -> hash
@ -5818,7 +5845,7 @@ env_to_hash(void)
*
*/
static VALUE
env_to_h(void)
env_to_h(VALUE _)
{
VALUE hash = env_to_hash();
if (rb_block_given_p()) {
@ -5836,7 +5863,7 @@ env_to_h(void)
* environment.
*/
static VALUE
env_reject(void)
env_reject(VALUE _)
{
return rb_hash_delete_if(env_to_hash());
}
@ -5863,7 +5890,7 @@ env_freeze(VALUE self)
* an Array. Returns +nil+ if when the environment is empty.
*/
static VALUE
env_shift(void)
env_shift(VALUE _)
{
char **env;
VALUE result = Qnil;
@ -5890,7 +5917,7 @@ env_shift(void)
* and values as names.
*/
static VALUE
env_invert(void)
env_invert(VALUE _)
{
return rb_hash_invert(env_to_hash());
}
@ -6203,7 +6230,7 @@ Init_Hash(void)
rb_define_singleton_method(envtbl, "delete_if", env_delete_if, 0);
rb_define_singleton_method(envtbl, "keep_if", env_keep_if, 0);
rb_define_singleton_method(envtbl, "slice", env_slice, -1);
rb_define_singleton_method(envtbl, "clear", rb_env_clear, 0);
rb_define_singleton_method(envtbl, "clear", env_clear, 0);
rb_define_singleton_method(envtbl, "reject", env_reject, 0);
rb_define_singleton_method(envtbl, "reject!", env_reject_bang, 0);
rb_define_singleton_method(envtbl, "select", env_select, 0);
@ -6225,8 +6252,8 @@ Init_Hash(void)
rb_define_singleton_method(envtbl, "size", env_size, 0);
rb_define_singleton_method(envtbl, "length", env_size, 0);
rb_define_singleton_method(envtbl, "empty?", env_empty_p, 0);
rb_define_singleton_method(envtbl, "keys", env_keys, 0);
rb_define_singleton_method(envtbl, "values", env_values, 0);
rb_define_singleton_method(envtbl, "keys", env_f_keys, 0);
rb_define_singleton_method(envtbl, "values", env_f_values, 0);
rb_define_singleton_method(envtbl, "values_at", env_values_at, -1);
rb_define_singleton_method(envtbl, "include?", env_has_key, 1);
rb_define_singleton_method(envtbl, "member?", env_has_key, 1);
@ -6234,7 +6261,7 @@ Init_Hash(void)
rb_define_singleton_method(envtbl, "has_value?", env_has_value, 1);
rb_define_singleton_method(envtbl, "key?", env_has_key, 1);
rb_define_singleton_method(envtbl, "value?", env_has_value, 1);
rb_define_singleton_method(envtbl, "to_hash", env_to_hash, 0);
rb_define_singleton_method(envtbl, "to_hash", env_f_to_hash, 0);
rb_define_singleton_method(envtbl, "to_h", env_to_h, 0);
rb_define_singleton_method(envtbl, "assoc", env_assoc, 1);
rb_define_singleton_method(envtbl, "rassoc", env_rassoc, 1);

View file

@ -1127,6 +1127,47 @@ __attribute__((__unused__,__weakref__("rb_define_private_method"),__nonnull__(2,
#define rb_define_private_method_choose_prototypem2(n) rb_define_method_if_constexpr((n)==-2,rb_define_private_methodm2,rb_define_private_method_choose_prototypem1(n))
#define rb_define_private_method_choose_prototypem3(n, f) rb_define_method_if_constexpr(rb_f_notimplement_p(f),rb_define_private_methodm3,rb_define_private_method_choose_prototypem2(n))
#define rb_define_private_method(klass, mid, func, arity) rb_define_private_method_choose_prototypem3((arity),(func))((klass),(mid),(func),(arity));
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_methodm3(VALUE,const char*,VALUE(*)(ANYARGS),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_methodm2(VALUE,const char*,VALUE(*)(VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_methodm1(VALUE,const char*,VALUE(*)(int,union __attribute__((__transparent_union__)){VALUE*x;const VALUE*y;},VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method0 (VALUE,const char*,VALUE(*)(VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method1 (VALUE,const char*,VALUE(*)(VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method2 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method3 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method4 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method5 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method6 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method7 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method8 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method9 (VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method10(VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method11(VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method12(VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method13(VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method14(VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
__attribute__((__unused__,__weakref__("rb_define_singleton_method"),__nonnull__(2,3)))static void rb_define_singleton_method15(VALUE,const char*,VALUE(*)(VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE),int);
#define rb_define_singleton_method_choose_prototype15(n) rb_define_method_if_constexpr((n)==15,rb_define_singleton_method15,rb_define_singleton_methodm3)
#define rb_define_singleton_method_choose_prototype14(n) rb_define_method_if_constexpr((n)==14,rb_define_singleton_method14,rb_define_singleton_method_choose_prototype15(n))
#define rb_define_singleton_method_choose_prototype13(n) rb_define_method_if_constexpr((n)==13,rb_define_singleton_method13,rb_define_singleton_method_choose_prototype14(n))
#define rb_define_singleton_method_choose_prototype12(n) rb_define_method_if_constexpr((n)==12,rb_define_singleton_method12,rb_define_singleton_method_choose_prototype13(n))
#define rb_define_singleton_method_choose_prototype11(n) rb_define_method_if_constexpr((n)==11,rb_define_singleton_method11,rb_define_singleton_method_choose_prototype12(n))
#define rb_define_singleton_method_choose_prototype10(n) rb_define_method_if_constexpr((n)==10,rb_define_singleton_method10,rb_define_singleton_method_choose_prototype11(n))
#define rb_define_singleton_method_choose_prototype9(n) rb_define_method_if_constexpr((n)== 9,rb_define_singleton_method9, rb_define_singleton_method_choose_prototype10(n))
#define rb_define_singleton_method_choose_prototype8(n) rb_define_method_if_constexpr((n)== 8,rb_define_singleton_method8, rb_define_singleton_method_choose_prototype9(n))
#define rb_define_singleton_method_choose_prototype7(n) rb_define_method_if_constexpr((n)== 7,rb_define_singleton_method7, rb_define_singleton_method_choose_prototype8(n))
#define rb_define_singleton_method_choose_prototype6(n) rb_define_method_if_constexpr((n)== 6,rb_define_singleton_method6, rb_define_singleton_method_choose_prototype7(n))
#define rb_define_singleton_method_choose_prototype5(n) rb_define_method_if_constexpr((n)== 5,rb_define_singleton_method5, rb_define_singleton_method_choose_prototype6(n))
#define rb_define_singleton_method_choose_prototype4(n) rb_define_method_if_constexpr((n)== 4,rb_define_singleton_method4, rb_define_singleton_method_choose_prototype5(n))
#define rb_define_singleton_method_choose_prototype3(n) rb_define_method_if_constexpr((n)== 3,rb_define_singleton_method3, rb_define_singleton_method_choose_prototype4(n))
#define rb_define_singleton_method_choose_prototype2(n) rb_define_method_if_constexpr((n)== 2,rb_define_singleton_method2, rb_define_singleton_method_choose_prototype3(n))
#define rb_define_singleton_method_choose_prototype1(n) rb_define_method_if_constexpr((n)== 1,rb_define_singleton_method1, rb_define_singleton_method_choose_prototype2(n))
#define rb_define_singleton_method_choose_prototype0(n) rb_define_method_if_constexpr((n)== 0,rb_define_singleton_method0, rb_define_singleton_method_choose_prototype1(n))
#define rb_define_singleton_method_choose_prototypem1(n) rb_define_method_if_constexpr((n)==-1,rb_define_singleton_methodm1,rb_define_singleton_method_choose_prototype0(n))
#define rb_define_singleton_method_choose_prototypem2(n) rb_define_method_if_constexpr((n)==-2,rb_define_singleton_methodm2,rb_define_singleton_method_choose_prototypem1(n))
#define rb_define_singleton_method_choose_prototypem3(n, f) rb_define_method_if_constexpr(rb_f_notimplement_p(f),rb_define_singleton_methodm3,rb_define_singleton_method_choose_prototypem2(n))
#define rb_define_singleton_method(klass, mid, func, arity) rb_define_singleton_method_choose_prototypem3((arity),(func))((klass),(mid),(func),(arity));
#endif
#endif

2
io.c
View file

@ -7042,7 +7042,7 @@ rb_io_s_open(int argc, VALUE *argv, VALUE klass)
*/
static VALUE
rb_io_s_sysopen(int argc, VALUE *argv)
rb_io_s_sysopen(int argc, VALUE *argv, VALUE _)
{
VALUE fname, vmode, vperm;
VALUE intmode;

View file

@ -93,14 +93,14 @@ typedef struct {
static rb_random_t default_rand;
static VALUE rand_init(struct MT *mt, VALUE vseed);
static VALUE random_seed(void);
static VALUE random_seed(VALUE);
static rb_random_t *
rand_start(rb_random_t *r)
{
struct MT *mt = &r->mt;
if (!genrand_initialized(mt)) {
r->seed = rand_init(mt, random_seed());
r->seed = rand_init(mt, random_seed(Qundef));
}
return r;
}
@ -261,7 +261,7 @@ random_init(int argc, VALUE *argv, VALUE obj)
if (rb_check_arity(argc, 0, 1) == 0) {
rb_check_frozen(obj);
vseed = random_seed();
vseed = random_seed(obj);
}
else {
vseed = argv[0];
@ -498,7 +498,7 @@ make_seed_value(uint32_t *ptr, size_t len)
* Random.new_seed #=> 115032730400174366788466674494640623225
*/
static VALUE
random_seed(void)
random_seed(VALUE _)
{
VALUE v;
uint32_t buf[DEFAULT_SEED_CNT+1];
@ -691,7 +691,7 @@ rb_f_srand(int argc, VALUE *argv, VALUE obj)
rb_random_t *r = &default_rand;
if (rb_check_arity(argc, 0, 1) == 0) {
seed = random_seed();
seed = random_seed(obj);
}
else {
seed = rb_to_int(argv[0]);

2
re.c
View file

@ -3998,7 +3998,7 @@ match_setter(VALUE val, ID _x, VALUE *_y)
*/
static VALUE
rb_reg_s_last_match(int argc, VALUE *argv)
rb_reg_s_last_match(int argc, VALUE *argv, VALUE _)
{
if (rb_check_arity(argc, 0, 1) == 1) {
VALUE match = rb_backref_get();

View file

@ -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);

View file

@ -843,22 +843,6 @@ symbols_i(st_data_t key, st_data_t value, st_data_t arg)
}
/*
* 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, :$>]
*/
VALUE
rb_sym_all_symbols(void)
{

View file

@ -2494,7 +2494,7 @@ rb_thread_s_kill(VALUE obj, VALUE th)
*/
static VALUE
rb_thread_exit(void)
rb_thread_exit(VALUE _)
{
rb_thread_t *th = GET_THREAD();
return rb_thread_kill(th->self);
@ -2573,6 +2573,17 @@ rb_thread_run(VALUE thread)
}
VALUE
rb_thread_stop(void)
{
if (rb_thread_alone()) {
rb_raise(rb_eThreadError,
"stopping only thread\n\tnote: use sleep to stop forever");
}
rb_thread_sleep_deadly();
return Qnil;
}
/*
* call-seq:
* Thread.stop -> nil
@ -2588,19 +2599,34 @@ rb_thread_run(VALUE thread)
* #=> "abc"
*/
VALUE
rb_thread_stop(void)
static VALUE
thread_stop(VALUE _)
{
if (rb_thread_alone()) {
rb_raise(rb_eThreadError,
"stopping only thread\n\tnote: use sleep to stop forever");
}
rb_thread_sleep_deadly();
return Qnil;
return rb_thread_stop();
}
/********************************************************************/
VALUE
rb_thread_list(void)
{
VALUE ary = rb_ary_new();
rb_vm_t *vm = GET_THREAD()->vm;
rb_thread_t *th = 0;
list_for_each(&vm->living_threads, th, vmlt_node) {
switch (th->status) {
case THREAD_RUNNABLE:
case THREAD_STOPPED:
case THREAD_STOPPED_FOREVER:
rb_ary_push(ary, th->self);
default:
break;
}
}
return ary;
}
/*
* call-seq:
* Thread.list -> array
@ -2621,24 +2647,10 @@ rb_thread_stop(void)
* #<Thread:0x401bdf4c run>
*/
VALUE
rb_thread_list(void)
static VALUE
thread_list(VALUE _)
{
VALUE ary = rb_ary_new();
rb_vm_t *vm = GET_THREAD()->vm;
rb_thread_t *th = 0;
list_for_each(&vm->living_threads, th, vmlt_node) {
switch (th->status) {
case THREAD_RUNNABLE:
case THREAD_STOPPED:
case THREAD_STOPPED_FOREVER:
rb_ary_push(ary, th->self);
default:
break;
}
}
return ary;
return rb_thread_list();
}
VALUE
@ -2703,7 +2715,7 @@ rb_thread_s_main(VALUE klass)
*/
static VALUE
rb_thread_s_abort_exc(void)
rb_thread_s_abort_exc(VALUE _)
{
return GET_THREAD()->vm->thread_abort_on_exception ? Qtrue : Qfalse;
}
@ -2833,7 +2845,7 @@ rb_thread_abort_exc_set(VALUE thread, VALUE val)
*/
static VALUE
rb_thread_s_report_exc(void)
rb_thread_s_report_exc(VALUE _)
{
return GET_THREAD()->vm->thread_report_on_exception ? Qtrue : Qfalse;
}
@ -5132,11 +5144,11 @@ Init_Thread(void)
rb_define_singleton_method(rb_cThread, "fork", thread_start, -2);
rb_define_singleton_method(rb_cThread, "main", rb_thread_s_main, 0);
rb_define_singleton_method(rb_cThread, "current", thread_s_current, 0);
rb_define_singleton_method(rb_cThread, "stop", rb_thread_stop, 0);
rb_define_singleton_method(rb_cThread, "stop", thread_stop, 0);
rb_define_singleton_method(rb_cThread, "kill", rb_thread_s_kill, 1);
rb_define_singleton_method(rb_cThread, "exit", rb_thread_exit, 0);
rb_define_singleton_method(rb_cThread, "pass", thread_s_pass, 0);
rb_define_singleton_method(rb_cThread, "list", rb_thread_list, 0);
rb_define_singleton_method(rb_cThread, "list", thread_list, 0);
rb_define_singleton_method(rb_cThread, "abort_on_exception", rb_thread_s_abort_exc, 0);
rb_define_singleton_method(rb_cThread, "abort_on_exception=", rb_thread_s_abort_exc_set, 1);
rb_define_singleton_method(rb_cThread, "report_on_exception", rb_thread_s_report_exc, 0);

10
vm.c
View file

@ -2827,7 +2827,7 @@ core_hash_merge_kwd(VALUE hash, VALUE kw)
/* Returns true if JIT is enabled */
static VALUE
mjit_enabled_p(void)
mjit_enabled_p(VALUE _)
{
return mjit_enabled ? Qtrue : Qfalse;
}
@ -2849,6 +2849,12 @@ mjit_pause_m(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
return mjit_pause(RTEST(wait));
}
static VALUE
mjit_resume_m(VALUE _)
{
return mjit_resume();
}
extern VALUE *rb_gc_stack_start;
extern size_t rb_gc_stack_maxsize;
@ -2974,7 +2980,7 @@ Init_VM(void)
mjit = rb_define_module_under(rb_cRubyVM, "MJIT");
rb_define_singleton_method(mjit, "enabled?", mjit_enabled_p, 0);
rb_define_singleton_method(mjit, "pause", mjit_pause_m, -1);
rb_define_singleton_method(mjit, "resume", mjit_resume, 0);
rb_define_singleton_method(mjit, "resume", mjit_resume_m, 0);
/*
* Document-class: Thread