X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-perl/blobdiff_plain/68e68e18c457d31c1c61bc08dd14a56e7e7ac21e..a1a90aaf554eb974e39e34b513747eb666180776:/mpstuff.c diff --git a/mpstuff.c b/mpstuff.c index 34a5b54..c891a76 100644 --- a/mpstuff.c +++ b/mpstuff.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: mpstuff.c,v 1.2 2004/04/08 01:36:21 mdw Exp $ + * $Id$ * * MP manipulation stuff * @@ -107,19 +107,20 @@ int mp_writesv(mp *m, SV *sv, int radix) /* --- Conversion to and from SVs --- */ -mp *mp_fromsv(SV *sv, const char *what, int radix, int keep, ...) +mp *mp_fromsv(SV *sv, const char *what, const char *ty, + int radix, int keep, ...) { mp *m; if (SvROK(sv)) { - if (sv_derived_from(sv, "Catacomb::MP")) + if (sv_derived_from(sv, "Catacomb::MP") || + sv_derived_from(sv, "Catacomb::GF")) m = (mp *)SvIV((SV *)SvRV(sv)); else { va_list ap; - SV *t = NEWSV(0, 0); + SV *t = sv_newmortal(); va_start(ap, keep); sv_vsetpvfn(t, what, strlen(what), &ap, 0, 0, 0); - croak("%s is not of type Catacomb::MP", SvPVX(t)); - SvREFCNT_dec(t); + croak("%s is not of type %s", SvPVX(t), ty); } } else { if (SvIOK(sv)) @@ -127,7 +128,7 @@ mp *mp_fromsv(SV *sv, const char *what, int radix, int keep, ...) else m = mp_readsv(MP_NEW, sv, 0, radix); if (m && !keep) - RET_MP(m); /* Kill temporary later */ + RET(m, ty); /* Kill temporary later */ } return (m); }