summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2023-11-23 11:45:02 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2023-11-23 12:16:57 -0500
commitecdb11288113b5e8b907530512af449f3ffc6c07 (patch)
tree581c9dca1643e23fbe652d3c78f09a386ccc7911
parent440b59db10bf3cd163092f5b20d32a7654c2d6ff (diff)
Fix `rp(too_complex_t_object)` tripping assert
Previously, it tripped the assert about too_complex in ROBJECT_IV_CAPACITY(). This fixes double faults for some crashes and helps with use during development.
-rw-r--r--gc.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/gc.c b/gc.c
index 0c3a73a9f0..7c1327f1d7 100644
--- a/gc.c
+++ b/gc.c
@@ -13737,14 +13737,20 @@ rb_raw_obj_info_buitin_type(char *const buff, const size_t buff_size, const VALU
}
case T_OBJECT:
{
- uint32_t len = ROBJECT_IV_CAPACITY(obj);
-
- if (RANY(obj)->as.basic.flags & ROBJECT_EMBED) {
- APPEND_F("(embed) len:%d", len);
+ if (rb_shape_obj_too_complex(obj)) {
+ size_t hash_len = rb_st_table_size(ROBJECT_IV_HASH(obj));
+ APPEND_F("(too_complex) len:%zu", hash_len);
}
else {
- VALUE *ptr = ROBJECT_IVPTR(obj);
- APPEND_F("len:%d ptr:%p", len, (void *)ptr);
+ uint32_t len = ROBJECT_IV_CAPACITY(obj);
+
+ if (RANY(obj)->as.basic.flags & ROBJECT_EMBED) {
+ APPEND_F("(embed) len:%d", len);
+ }
+ else {
+ VALUE *ptr = ROBJECT_IVPTR(obj);
+ APPEND_F("len:%d ptr:%p", len, (void *)ptr);
+ }
}
}
break;