diff options
| author | Alan Wu <XrXr@users.noreply.github.com> | 2023-11-23 11:45:02 -0500 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2023-11-23 12:16:57 -0500 |
| commit | ecdb11288113b5e8b907530512af449f3ffc6c07 (patch) | |
| tree | 581c9dca1643e23fbe652d3c78f09a386ccc7911 | |
| parent | 440b59db10bf3cd163092f5b20d32a7654c2d6ff (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.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -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; |
