From 412e3c7a8db275567eaceece6c48dde3aedf2ae6 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 19 Oct 2022 18:45:26 +0900 Subject: Assert for RTEST that Qnil and Qfalse differ just 1 bit --- include/ruby/internal/special_consts.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'include/ruby') diff --git a/include/ruby/internal/special_consts.h b/include/ruby/internal/special_consts.h index 38934e4da3..70276278eb 100644 --- a/include/ruby/internal/special_consts.h +++ b/include/ruby/internal/special_consts.h @@ -136,6 +136,7 @@ static inline bool RB_TEST(VALUE obj) { /* + * if USE_FLONUM * Qfalse: ....0000 0000 * Qnil: ....0000 1000 * ~Qnil: ....1111 0111 @@ -143,6 +144,14 @@ RB_TEST(VALUE obj) * ---------------------------- * RTEST(v) ....xxxx 0xxx * + * if ! USE_FLONUM + * Qfalse: ....0000 0000 + * Qnil: ....0000 0100 + * ~Qnil: ....1111 1011 + * v ....xxxx xxxx + * ---------------------------- + * RTEST(v) ....xxxx x0xx + * * RTEST(v) can be 0 if and only if (v == Qfalse || v == Qnil). */ return obj & ~RUBY_Qnil; -- cgit v1.2.3