RBA inspector does not crash on unknown class

This commit is contained in:
Matthias Koefferlein 2021-05-23 12:20:02 +02:00
parent 726fe40e22
commit 93f9b693d3
3 changed files with 14 additions and 3 deletions

View File

@ -338,7 +338,7 @@ public:
: m_obj (obj), mp_cls (0), m_members (Qnil)
{
rb_gc_register_address (&m_obj);
mp_cls = find_cclass (rb_class_of (m_obj));
mp_cls = find_cclass_maybe_null (rb_class_of (m_obj));
m_members = rb_obj_instance_variables (m_obj);
rb_gc_register_address (&m_members);

View File

@ -940,6 +940,13 @@ bool is_registered (const gsi::ClassBase *cls)
}
const gsi::ClassBase *find_cclass (VALUE k)
{
const gsi::ClassBase *cls = find_cclass_maybe_null (k);
tl_assert (cls != 0);
return cls;
}
const gsi::ClassBase *find_cclass_maybe_null (VALUE k)
{
std::map <VALUE, const gsi::ClassBase *>::const_iterator cls;
@ -954,8 +961,7 @@ const gsi::ClassBase *find_cclass (VALUE k)
}
}
tl_assert (cls != cls_map.end ());
return cls->second;
return cls != cls_map.end () ? cls->second : 0;
}
}

View File

@ -218,6 +218,11 @@ void register_class (VALUE ruby_cls, const gsi::ClassBase *gsi_cls);
*/
const gsi::ClassBase *find_cclass (VALUE k);
/**
* @brief Find the class declaration from the Ruby object
*/
const gsi::ClassBase *find_cclass_maybe_null (VALUE k);
/**
* @brief Finds the Ruby class for a gsi class
*/