void must_not_delete_cpp_object(SV* perl_obj, bool must_not_delete) {
HV* hidden_hash;
IV can_delete;
SV** can_delete_sv;
hidden_hash = get_hidden_hash(perl_obj);
can_delete_sv = hv_fetch(hidden_hash, "_can_delete", 11, 0);
can_delete = must_not_delete ? 0 : 1;
sv_setiv(*can_delete_sv, can_delete);
hv_store(hidden_hash, "_can_delete", 11, *can_delete_sv, 0);
}
####
Setting can_delete to 0 in 403291976 at test.pl line 136.
Can't coerce HASH to integer in subroutine entry at test.pl line 136.
####
HV* get_hidden_hash(SV* perl_obj) {
SV* underlying_hash;
MAGIC* mg;
HV* hidden_hash;
// get the underlying hash that the perl_obj is a reference to
// (we can leave it an SV* because we're just using it to find magic)
underlying_hash = SvRV(perl_obj);
// get the hidden hash linked to the perl_obj
mg = mg_find(underlying_hash, PERL_MAGIC_ext);
hidden_hash = (HV*)mg->mg_obj;
return hidden_hash;
}