X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/19e9591baa02172b384aec1d599cdc281076b637..e1c0692925:/typemap diff --git a/typemap b/typemap index 5bd5a473..d7d57a1f 100644 --- a/typemap +++ b/typemap @@ -6,16 +6,15 @@ Imager::Font::TT T_PTROBJ Imager::IO T_PTROBJ Imager::FillHandle T_PTROBJ const char * T_PV -float T_FLOAT +im_float T_FLOAT float* T_ARRAY undef_int T_IV_U undef_neg_int T_IV_NEGU HASH T_HVREF utf8_str T_UTF8_STR -i_img_dim T_IV +i_img_dim T_IV_checked +im_double T_NV_checked -double * T_AVARRAY -int * T_AVARRAY # these types are for use by Inline, which can't handle types containing :: Imager__Color T_PTROBJ_INV @@ -79,31 +78,27 @@ T_PTROBJ_INV else croak(\"$var is not of type ${(my $ntt=$ntype)=~s/__/::/g;\$ntt}\"); -T_AVARRAY - STMT_START { - SV* const xsub_tmp_sv = $arg; - SvGETMAGIC(xsub_tmp_sv); - if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVAV){ - AV *xsub_tmp_av = (AV*)SvRV(xsub_tmp_sv); - STRLEN xsub_index; - size_$var = av_len(xsub_tmp_av) + 1; - $var = $ntype(size_$var); - for (xsub_index = 0; xsub_index < size_$var; ++xsub_index) { - SV **sv = av_fetch(xsub_tmp_av, xsub_index, 0); - if (sv) { - ${var}[xsub_index] = Sv${(my $ntt = $ntype) =~ s/Ptr$//; \(ucfirst $ntt)}(*sv); - } - else - ${var}[xsub_index] = 0; - } - } - else{ - Perl_croak(aTHX_ \"%s: %s is not an ARRAY reference\", - ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\"); - } - } STMT_END +T_NV_checked + { + SvGETMAGIC($arg); + if (SvROK($arg) && !SvAMAGIC($arg)) { + croak(\"Numeric argument '$var' shouldn't be a reference\"); + } + else { + $var = ($type)SvNV($arg); + } + } +T_IV_checked + { + SvGETMAGIC($arg); + if (SvROK($arg) && !SvAMAGIC($arg)) { + croak(\"Numeric argument '$var' shouldn't be a reference\"); + } + else { + $var = ($type)SvIV($arg); + } + } ############################################################################# OUTPUT @@ -136,3 +131,9 @@ T_IMAGER_FULL_IMAGE else { $arg = &PL_sv_undef; } + +T_IV_checked + sv_setiv($arg, (IV)$var); + +T_NV_checked + sv_setnv($arg, (NV)$var);