ruby/.gdbinit

143 строки
3.1 KiB
Plaintext

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