-
- Downloads
There was a problem fetching the pipeline summary.
Fixed getting classes from Tracepoint objects
Apparently when using RBASIC_CLASS() sometimes Ruby returns something that _looks_ like a VALUE but isn't. This results in Ruby sometimes treating it as a Fixnum of sorts while in other cases it just segfaults. To work around this we're now using rb_tracearg_defined_class() to get an object class, which seems to be the correct way of doing it (based on digging through the MRI source code). One small nuisance is that we now also get singleton classes which we generally don't care about (since there's always only one of them). This means we'll need to filter these out whenever we generate a Ruby Hash containing the counts per class. Of course MRI doesn't provide a sane API for this (that doesn't involve calling Ruby methods) so we instead use the same logic as MRI's implementation of Class#singleton_class? uses.
parent
8bdda6cb
No related branches found
No related tags found
Pipeline #
-
awesome stuff and explanation @yorickpeterse !
If I get it correctly, we don't need the
rb_obj_is_kind_of(key, rb_cClass) == Qtrue
check as we are now usingrb_tracearg_defined_class()
that always gets the right object?
Please register or sign in to comment