set $fl_ushift = 11 set $fl_user1 = 1 << ($fl_ushift + 0) set $fl_user1 = 1 << ($fl_ushift + 1) set $fl_user2 = 1 << ($fl_ushift + 2) set $fl_user3 = 1 << ($fl_ushift + 3) set $fl_user4 = 1 << ($fl_ushift + 4) set $fl_user5 = 1 << ($fl_ushift + 5) set $fl_user6 = 1 << ($fl_ushift + 6) set $fl_user7 = 1 << ($fl_ushift + 7) define rp if $arg0 & 1 printf "FIXNUM: %d\n", ((long)$arg0) >> 1 else if ($arg0 & 0xff) == 0x0e printf "SYMBOL(%d)\n", ((long)$arg0) >> 8 else if $arg0 == 0 echo false\n else if $arg0 == 2 echo true\n else if $arg0 == 4 echo nil\n else if $arg0 == 6 echo undef\n else if $arg0 & 0x03 echo immediate\n else set $flags = ((struct RBasic*)$arg0)->flags if ($flags & 0x1f) == 0x00 printf "T_NONE(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x01 printf "T_NIL(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x02 printf "T_OBJECT(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x03 printf "T_CLASS(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x04 printf "T_ICLASS(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x05 printf "T_MODULE(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x06 printf "T_FLOAT(0x%08x): %.16g\n", $arg0, (((struct RFloat*)$arg0)->value) else if ($flags & 0x1f) == 0x07 printf "T_STRING(0x%08x): \"%s\"\n", $arg0, ($flags & $fl_user1) ? ((struct RString*)$arg0)->as.heap.ptr : ((struct RString*)$arg0)->as.ary else if ($flags & 0x1f) == 0x08 printf "T_REGEXP(0x%08x): \"%s\"\n", $arg0, (((struct RRegexp*)$arg0)->str) else if ($flags & 0x1f) == 0x09 printf "T_ARRAY(0x%08x) len=%d\n", $arg0, ((struct RArray*)$arg0)->len else if ($flags & 0x1f) == 0x0a printf "T_FIXNUM(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x0b printf "T_HASH(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x0c printf "T_STRUCT(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x0d printf "T_BIGNUM(0x%08x): sign=%d len=%d\n", $arg0, ((struct RBignum*)$arg0)->sign, ((struct RBignum*)$arg0)->len else if ($flags & 0x1f) == 0x0e printf "T_FILE(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x10 printf "T_TRUE(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x11 printf "T_FALSE(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x12 printf "T_DATA(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x13 printf "T_MATCH(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x14 printf "T_SYMBOL(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x1a printf "T_VALUES(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x1b printf "T_BLOCK(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x1c printf "T_UNDEF(0x%08x)\n", $arg0 else if ($flags & 0x1f) == 0x1f printf "T_NODE(0x%08x)\n", $arg0 print (enum node_type)(($flags >> 11) & 0xff) else printf "unknown(0x%08x)\n", $arg0 end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end document rp Print a Ruby's VALUE. end