aboutsummaryrefslogtreecommitdiffstats
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 57f6d91e88..1875d35de1 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -4228,6 +4228,26 @@ vm_opt_empty_p(VALUE recv)
}
}
+VALUE rb_false(VALUE obj);
+
+static VALUE
+vm_opt_nil_p(CALL_INFO ci, CALL_CACHE cc, VALUE recv)
+{
+ if (recv == Qnil) {
+ if (BASIC_OP_UNREDEFINED_P(BOP_NIL_P, NIL_REDEFINED_OP_FLAG)) {
+ return Qtrue;
+ } else {
+ return Qundef;
+ }
+ } else {
+ if (vm_method_cfunc_is(ci, cc, recv, rb_false)) {
+ return Qfalse;
+ } else {
+ return Qundef;
+ }
+ }
+}
+
static VALUE
fix_succ(VALUE x)
{