mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
rb_warn_deprecated_to_remove_at [Feature #17432]
At compilation time with RUBY_DEBUG enabled, check if the removal version has been reached.
This commit is contained in:
parent
d1998d8767
commit
8118d435d0
Notes:
git
2021-06-30 10:47:37 +09:00
5 changed files with 86 additions and 28 deletions
49
error.c
49
error.c
|
@ -484,34 +484,49 @@ rb_enc_warning(rb_encoding *enc, const char *fmt, ...)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
static bool
|
||||||
rb_warn_deprecated(const char *fmt, const char *suggest, ...)
|
deprecation_warning_enabled(void)
|
||||||
|
{
|
||||||
|
if (NIL_P(ruby_verbose)) return false;
|
||||||
|
if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
warn_deprecated(VALUE mesg, bool removal, const char *suggest)
|
||||||
{
|
{
|
||||||
if (NIL_P(ruby_verbose)) return;
|
|
||||||
if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return;
|
|
||||||
va_list args;
|
|
||||||
va_start(args, suggest);
|
|
||||||
VALUE mesg = warning_string(0, fmt, args);
|
|
||||||
va_end(args);
|
|
||||||
rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1);
|
rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1);
|
||||||
rb_str_cat_cstr(mesg, " is deprecated");
|
rb_str_cat_cstr(mesg, " is deprecated");
|
||||||
|
if (removal) rb_str_cat_cstr(mesg, ", and is planned for removal");
|
||||||
if (suggest) rb_str_catf(mesg, "; use %s instead", suggest);
|
if (suggest) rb_str_catf(mesg, "; use %s instead", suggest);
|
||||||
rb_str_cat_cstr(mesg, "\n");
|
rb_str_cat_cstr(mesg, "\n");
|
||||||
rb_warn_category(mesg, ID2SYM(id_deprecated));
|
rb_warn_category(mesg, ID2SYM(id_deprecated));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_warn_deprecated_to_remove(const char *fmt, const char *removal, ...)
|
rb_warn_deprecated(const char *fmt, const char *suggest, ...)
|
||||||
{
|
{
|
||||||
if (NIL_P(ruby_verbose)) return;
|
if (!deprecation_warning_enabled()) return;
|
||||||
if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_DEPRECATED)) return;
|
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, removal);
|
va_start(args, suggest);
|
||||||
VALUE mesg = warning_string(0, fmt, args);
|
VALUE mesg = warning_string(0, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
rb_str_set_len(mesg, RSTRING_LEN(mesg) - 1);
|
|
||||||
rb_str_catf(mesg, " is deprecated and will be removed in Ruby %s\n", removal);
|
warn_deprecated(mesg, false, suggest);
|
||||||
rb_warn_category(mesg, ID2SYM(id_deprecated));
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rb_warn_deprecated_to_remove(const char *fmt, const char *suggest, ...)
|
||||||
|
{
|
||||||
|
if (!deprecation_warning_enabled()) return;
|
||||||
|
|
||||||
|
va_list args;
|
||||||
|
va_start(args, suggest);
|
||||||
|
VALUE mesg = warning_string(0, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
warn_deprecated(mesg, true, suggest);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
@ -3296,14 +3311,14 @@ rb_check_frozen(VALUE obj)
|
||||||
void
|
void
|
||||||
rb_error_untrusted(VALUE obj)
|
rb_error_untrusted(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("rb_error_untrusted", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "rb_error_untrusted", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef rb_check_trusted
|
#undef rb_check_trusted
|
||||||
void
|
void
|
||||||
rb_check_trusted(VALUE obj)
|
rb_check_trusted(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("rb_check_trusted", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "rb_check_trusted", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
2
hash.c
2
hash.c
|
@ -5043,7 +5043,7 @@ env_fetch(int argc, VALUE *argv, VALUE _)
|
||||||
int
|
int
|
||||||
rb_env_path_tainted(void)
|
rb_env_path_tainted(void)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("rb_env_path_tainted", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "rb_env_path_tainted", NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,50 @@ NORETURN(void rb_async_bug_errno(const char *,int));
|
||||||
const char *rb_builtin_type_name(int t);
|
const char *rb_builtin_type_name(int t);
|
||||||
const char *rb_builtin_class_name(VALUE x);
|
const char *rb_builtin_class_name(VALUE x);
|
||||||
PRINTF_ARGS(void rb_warn_deprecated(const char *fmt, const char *suggest, ...), 1, 3);
|
PRINTF_ARGS(void rb_warn_deprecated(const char *fmt, const char *suggest, ...), 1, 3);
|
||||||
PRINTF_ARGS(void rb_warn_deprecated_to_remove(const char *fmt, const char *removal, ...), 1, 3);
|
PRINTF_ARGS(void rb_warn_deprecated_to_remove(const char *fmt, const char *suggest, ...), 1, 3);
|
||||||
|
#if RUBY_DEBUG && (RBIMPL_HAS_ATTRIBUTE(diagnose_if) || defined(__OPTIMIZE__))
|
||||||
|
# include "ruby/version.h"
|
||||||
|
|
||||||
|
#define RUBY_VERSION_isdigit(c) ('0'<=(c)&&(c)<='9')
|
||||||
|
// upto 99
|
||||||
|
#define RUBY_VERSION__number_len(v, ofs) \
|
||||||
|
(!RUBY_VERSION_isdigit((v)[ofs]) ? \
|
||||||
|
0 : !RUBY_VERSION_isdigit((v)[(ofs) + 1]) ? 1 : 2)
|
||||||
|
#define RUBY_VERSION__to_number(v, ofs) \
|
||||||
|
(!RUBY_VERSION_isdigit((v)[ofs]) ? \
|
||||||
|
0 : !RUBY_VERSION_isdigit((v)[(ofs) + 1]) ? \
|
||||||
|
((v)[ofs]-'0') : \
|
||||||
|
(((v)[ofs]-'0')*10+(v)[(ofs)+1]-'0'))
|
||||||
|
|
||||||
|
#define RUBY_VERSION_CODE_FROM_MAJOR_MINOR_STRING(v) \
|
||||||
|
(RUBY_VERSION__to_number(v, 0) * 10000 + \
|
||||||
|
((v)[RUBY_VERSION__number_len(v, 0)] == '.' ? \
|
||||||
|
RUBY_VERSION__to_number(v, RUBY_VERSION__number_len(v, 0)+1) * 100 : 0))
|
||||||
|
#define RUBY_VERSION_SINCE(v) (RUBY_API_VERSION_CODE >= RUBY_VERSION_CODE_FROM_MAJOR_MINOR_STRING(v))
|
||||||
|
#define RUBY_VERSION_BEFORE(v) (RUBY_API_VERSION_CODE < RUBY_VERSION_CODE_FROM_MAJOR_MINOR_STRING(v))
|
||||||
|
|
||||||
|
# if RBIMPL_HAS_ATTRIBUTE(diagnose_if)
|
||||||
|
RBIMPL_ATTR_FORCEINLINE()
|
||||||
|
static void
|
||||||
|
rb_deprecated_method_to_be_removed(const char *removal)
|
||||||
|
RBIMPL_ATTR_DIAGNOSE_IF(RUBY_VERSION_SINCE(removal), "deprecated method to be removed", "error")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
RBIMPL_ATTR_ERROR(("deprecated"))
|
||||||
|
void rb_deprecated_method_to_be_removed(const char *);
|
||||||
|
# define rb_deprecated_method_to_be_removed(removal) \
|
||||||
|
(sizeof(char[1-2*RUBY_VERSION_SINCE(removal)])!=1 ? \
|
||||||
|
rb_deprecated_method_to_be_removed(removal) : \
|
||||||
|
RBIMPL_ASSERT_NOTHING)
|
||||||
|
# endif
|
||||||
|
# define rb_warn_deprecated_to_remove_at(removal, ...) \
|
||||||
|
(rb_deprecated_method_to_be_removed(removal), \
|
||||||
|
rb_warn_deprecated_to_remove(__VA_ARGS__))
|
||||||
|
#else
|
||||||
|
# define rb_warn_deprecated_to_remove_at(removal, ...) \
|
||||||
|
rb_warn_deprecated_to_remove(__VA_ARGS__)
|
||||||
|
#endif
|
||||||
VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
|
VALUE rb_syntax_error_append(VALUE, VALUE, int, int, rb_encoding*, const char*, va_list);
|
||||||
PRINTF_ARGS(void rb_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3);
|
PRINTF_ARGS(void rb_enc_warn(rb_encoding *enc, const char *fmt, ...), 2, 3);
|
||||||
PRINTF_ARGS(void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3);
|
PRINTF_ARGS(void rb_sys_enc_warning(rb_encoding *enc, const char *fmt, ...), 2, 3);
|
||||||
|
|
14
object.c
14
object.c
|
@ -1205,7 +1205,7 @@ rb_obj_dummy1(VALUE _x, VALUE _y)
|
||||||
VALUE
|
VALUE
|
||||||
rb_obj_tainted(VALUE obj)
|
rb_obj_tainted(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("Object#tainted?", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "Object#tainted?", NULL);
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1219,7 +1219,7 @@ rb_obj_tainted(VALUE obj)
|
||||||
VALUE
|
VALUE
|
||||||
rb_obj_taint(VALUE obj)
|
rb_obj_taint(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("Object#taint", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "Object#taint", NULL);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1234,7 +1234,7 @@ rb_obj_taint(VALUE obj)
|
||||||
VALUE
|
VALUE
|
||||||
rb_obj_untaint(VALUE obj)
|
rb_obj_untaint(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("Object#untaint", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "Object#untaint", NULL);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1248,7 +1248,7 @@ rb_obj_untaint(VALUE obj)
|
||||||
VALUE
|
VALUE
|
||||||
rb_obj_untrusted(VALUE obj)
|
rb_obj_untrusted(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("Object#untrusted?", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "Object#untrusted?", NULL);
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1262,7 +1262,7 @@ rb_obj_untrusted(VALUE obj)
|
||||||
VALUE
|
VALUE
|
||||||
rb_obj_untrust(VALUE obj)
|
rb_obj_untrust(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("Object#untrust", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "Object#untrust", NULL);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1277,7 +1277,7 @@ rb_obj_untrust(VALUE obj)
|
||||||
VALUE
|
VALUE
|
||||||
rb_obj_trust(VALUE obj)
|
rb_obj_trust(VALUE obj)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("Object#trust", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "Object#trust", NULL);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1288,7 +1288,7 @@ rb_obj_trust(VALUE obj)
|
||||||
void
|
void
|
||||||
rb_obj_infect(VALUE victim, VALUE carrier)
|
rb_obj_infect(VALUE victim, VALUE carrier)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("rb_obj_infect", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "rb_obj_infect", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
4
string.c
4
string.c
|
@ -944,14 +944,14 @@ rb_enc_str_new_static(const char *ptr, long len, rb_encoding *enc)
|
||||||
VALUE
|
VALUE
|
||||||
rb_tainted_str_new(const char *ptr, long len)
|
rb_tainted_str_new(const char *ptr, long len)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("rb_tainted_str_new", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "rb_tainted_str_new", NULL);
|
||||||
return rb_str_new(ptr, len);
|
return rb_str_new(ptr, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_tainted_str_new_cstr(const char *ptr)
|
rb_tainted_str_new_cstr(const char *ptr)
|
||||||
{
|
{
|
||||||
rb_warn_deprecated_to_remove("rb_tainted_str_new_cstr", "3.2");
|
rb_warn_deprecated_to_remove_at("3.2", "rb_tainted_str_new_cstr", NULL);
|
||||||
return rb_str_new_cstr(ptr);
|
return rb_str_new_cstr(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue