Okay, I finally got it working. The problem was that mrb_value
needed to be fully defined in order for my code to work, because
it was being passed on the stack directly instead of by a pointer:
struct mrb_value
{
union
{
mrb_float f;
void* p;
mrb_int i;
mrb_sym sym;
}
mrb_vtype tt;
}