X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-perl/blobdiff_plain/ef3af890207c78e8352e850ed9fd510c10f7db56..f9952aec1cf6c64a5681308eea817b6113a37433:/mpstuff.c diff --git a/mpstuff.c b/mpstuff.c index c891a76..e048ff1 100644 --- a/mpstuff.c +++ b/mpstuff.c @@ -112,8 +112,7 @@ mp *mp_fromsv(SV *sv, const char *what, const char *ty, { mp *m; if (SvROK(sv)) { - if (sv_derived_from(sv, "Catacomb::MP") || - sv_derived_from(sv, "Catacomb::GF")) + if (sv_derived_from(sv, "Catacomb::MP")) m = (mp *)SvIV((SV *)SvRV(sv)); else { va_list ap; @@ -122,6 +121,8 @@ mp *mp_fromsv(SV *sv, const char *what, const char *ty, sv_vsetpvfn(t, what, strlen(what), &ap, 0, 0, 0); croak("%s is not of type %s", SvPVX(t), ty); } + if (m && keep) + MP_COPY(m); } else { if (SvIOK(sv)) m = mp_fromiv(MP_NEW, SvIV(sv));