summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-05-24 16:48:34 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-20 19:35:12 +0900
commita58611dfb1bfc74fb1a51a9cd0ca8ac690c2f1f4 (patch)
treec168f6a4b56c0b159a573639fffcead139a28e28 /object.c
parent15db2e9496703d76b2d785a9e2a1554833706e06 (diff)
downloadruby-a58611dfb1bfc74fb1a51a9cd0ca8ac690c2f1f4.tar.gz
Allow to just warn as bool expected, without an exception
Diffstat (limited to 'object.c')
-rw-r--r--object.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/object.c b/object.c
index c7375f0c56..6a7b2cbf23 100644
--- a/object.c
+++ b/object.c
@@ -3158,16 +3158,22 @@ rb_check_integer_type(VALUE val)
}
int
-rb_bool_expected(VALUE obj, const char *flagname)
+rb_bool_expected(VALUE obj, const char *flagname, int raise)
{
switch (obj) {
- case Qtrue: case Qfalse:
- break;
- default:
- rb_raise(rb_eArgError, "expected true or false as %s: %+"PRIsVALUE,
- flagname, obj);
+ case Qtrue:
+ return TRUE;
+ case Qfalse:
+ return FALSE;
+ default: {
+ static const char message[] = "expected true or false as %s: %+"PRIsVALUE;
+ if (raise) {
+ rb_raise(rb_eArgError, message, flagname, obj);
+ }
+ rb_warning(message, flagname, obj);
+ return !NIL_P(obj);
+ }
}
- return obj != Qfalse;
}
int
@@ -3176,7 +3182,7 @@ rb_opts_exception_p(VALUE opts, int default_value)
static const ID kwds[1] = {idException};
VALUE exception;
if (rb_get_kwargs(opts, kwds, 0, 1, &exception))
- return rb_bool_expected(exception, "exception");
+ return rb_bool_expected(exception, "exception", TRUE);
return default_value;
}
@@ -3562,7 +3568,7 @@ rb_f_float1(rb_execution_context_t *ec, VALUE obj, VALUE arg)
static VALUE
rb_f_float(rb_execution_context_t *ec, VALUE obj, VALUE arg, VALUE opts)
{
- int exception = rb_bool_expected(opts, "exception");
+ int exception = rb_bool_expected(opts, "exception", TRUE);
return rb_convert_to_float(arg, exception);
}