10 unsigned char T_U_CHAR
17 # bool_t is defined in <rpc/rpc.h>
22 unsigned long * T_OPAQUEPTR
28 # These are the backwards-compatibility AV*/HV* typemaps that
29 # do not decrement refcounts. Locally override with
30 # "AV* T_AVREF_REFCOUNT_FIXED", "HV* T_HVREF_REFCOUNT_FIXED",
31 # "CV* T_CVREF_REFCOUNT_FIXED", "SVREF T_SVREF_REFCOUNT_FIXED",
32 # to get the fixed versions.
62 #############################################################################
68 SV* const xsub_tmp_sv = $arg;
69 SvGETMAGIC(xsub_tmp_sv);
70 if (SvROK(xsub_tmp_sv)){
71 $var = SvRV(xsub_tmp_sv);
74 Perl_croak(aTHX_ \"%s: %s is not a reference\",
75 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
79 T_SVREF_REFCOUNT_FIXED
81 SV* const xsub_tmp_sv = $arg;
82 SvGETMAGIC(xsub_tmp_sv);
83 if (SvROK(xsub_tmp_sv)){
84 $var = SvRV(xsub_tmp_sv);
87 Perl_croak(aTHX_ \"%s: %s is not a reference\",
88 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
94 SV* const xsub_tmp_sv = $arg;
95 SvGETMAGIC(xsub_tmp_sv);
96 if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVAV){
97 $var = (AV*)SvRV(xsub_tmp_sv);
100 Perl_croak(aTHX_ \"%s: %s is not an ARRAY reference\",
101 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
105 T_AVREF_REFCOUNT_FIXED
107 SV* const xsub_tmp_sv = $arg;
108 SvGETMAGIC(xsub_tmp_sv);
109 if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVAV){
110 $var = (AV*)SvRV(xsub_tmp_sv);
113 Perl_croak(aTHX_ \"%s: %s is not an ARRAY reference\",
114 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
120 SV* const xsub_tmp_sv = $arg;
121 SvGETMAGIC(xsub_tmp_sv);
122 if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVHV){
123 $var = (HV*)SvRV(xsub_tmp_sv);
126 Perl_croak(aTHX_ \"%s: %s is not a HASH reference\",
127 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
131 T_HVREF_REFCOUNT_FIXED
133 SV* const xsub_tmp_sv = $arg;
134 SvGETMAGIC(xsub_tmp_sv);
135 if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVHV){
136 $var = (HV*)SvRV(xsub_tmp_sv);
139 Perl_croak(aTHX_ \"%s: %s is not a HASH reference\",
140 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
148 SV * const xsub_tmp_sv = $arg;
149 SvGETMAGIC(xsub_tmp_sv);
150 $var = sv_2cv(xsub_tmp_sv, &st, &gvp, 0);
152 Perl_croak(aTHX_ \"%s: %s is not a CODE reference\",
153 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
157 T_CVREF_REFCOUNT_FIXED
161 SV * const xsub_tmp_sv = $arg;
162 SvGETMAGIC(xsub_tmp_sv);
163 $var = sv_2cv(xsub_tmp_sv, &st, &gvp, 0);
165 Perl_croak(aTHX_ \"%s: %s is not a CODE reference\",
166 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
173 $var = ($type)SvUV($arg)
175 $var = ($type)SvIV($arg)
177 $var = (int)SvIV($arg)
179 $var = ($type)SvIV($arg)
181 $var = (bool)SvTRUE($arg)
183 $var = (unsigned int)SvUV($arg)
185 $var = (short)SvIV($arg)
187 $var = (unsigned short)SvUV($arg)
189 $var = (long)SvIV($arg)
191 $var = (unsigned long)SvUV($arg)
193 $var = (char)*SvPV_nolen($arg)
195 $var = (unsigned char)SvUV($arg)
197 $var = (float)SvNV($arg)
199 $var = ($type)SvNV($arg)
201 $var = (double)SvNV($arg)
204 SV * const t_pv_tmp_sv = $arg;
205 /* Note: This code works in 5.16 as well as 5.20, which is
206 not strictly necessary, since this typemap is not dual-
207 lifed. However, keeping this extra logic will make it
208 easier to backport if we decide to dual-life it, or if
209 someone copies the latest typemap into a CPAN dist. */
210 /* This takes advantage of the fact that SvIsCOW always
211 returned 1 or 0 back when all COWs were marked read-only
212 (pre-v5.17.5-484-ge3918bb0, when SvREADONLY did not nec-
213 essarily actually mean read-only) and SVf_IsCOW or 0
215 if ((SvIsCOW(t_pv_tmp_sv) && !SvREADONLY(t_pv_tmp_sv))
216 || SvIsCOW(t_pv_tmp_sv) == 1)
217 sv_force_normal(t_pv_tmp_sv);
218 $var = ($type)SvPV_nolen(t_pv_tmp_sv);
221 $var = ($type)SvPV_nolen($arg)
223 $var = INT2PTR($type,SvIV($arg))
226 IV tmp = SvIV((SV*)SvRV($arg));
227 $var = INT2PTR($type,tmp);
230 Perl_croak(aTHX_ \"%s: %s is not a reference\",
231 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
234 if (sv_isa($arg, \"${ntype}\")) {
235 IV tmp = SvIV((SV*)SvRV($arg));
236 $var = *INT2PTR($type *, tmp);
239 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
240 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
241 \"$var\", \"$ntype\")
243 if (sv_isa($arg, \"${ntype}\")) {
244 IV tmp = SvIV((SV*)SvRV($arg));
245 $var = INT2PTR($type, tmp);
248 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
249 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
250 \"$var\", \"$ntype\")
252 if (SvROK($arg) && sv_derived_from($arg, \"${ntype}\")) {
253 IV tmp = SvIV((SV*)SvRV($arg));
254 $var = INT2PTR($type,tmp);
257 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
258 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
259 \"$var\", \"$ntype\")
261 if (sv_isa($arg, \"${ntype}\")) {
262 IV tmp = SvIV((SV*)SvRV($arg));
263 ${type}_desc = (\U${type}_DESC\E*) tmp;
264 $var = ${type}_desc->ptr;
267 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
268 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
269 \"$var\", \"$ntype\")
272 IV tmp = SvIV((SV*)SvRV($arg));
273 $var = *INT2PTR($type,tmp);
276 Perl_croak(aTHX_ \"%s: %s is not a reference\",
277 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
280 if (sv_isa($arg, \"${ntype}\")) {
281 IV tmp = SvIV((SV*)SvRV($arg));
282 $var = *INT2PTR($type,tmp);
285 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
286 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
287 \"$var\", \"$ntype\")
289 $var = *($type *)SvPV_nolen($arg)
291 $var = ($type)SvPV_nolen($arg)
293 $var = XS_unpack_$ntype($arg)
295 $var = XS_unpack_$ntype($arg)
297 U32 ix_$var = $argoff;
298 $var = $ntype(items -= $argoff);
303 /* this is the number of elements in the array */
306 $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
308 $var = IoIFP(sv_2io($arg))
310 $var = IoIFP(sv_2io($arg))
312 $var = IoOFP(sv_2io($arg))
313 #############################################################################
318 $arg = newRV((SV*)$var);
319 T_SVREF_REFCOUNT_FIXED
320 $arg = newRV_noinc((SV*)$var);
322 $arg = newRV((SV*)$var);
323 T_AVREF_REFCOUNT_FIXED
324 $arg = newRV_noinc((SV*)$var);
326 $arg = newRV((SV*)$var);
327 T_HVREF_REFCOUNT_FIXED
328 $arg = newRV_noinc((SV*)$var);
330 $arg = newRV((SV*)$var);
331 T_CVREF_REFCOUNT_FIXED
332 $arg = newRV_noinc((SV*)$var);
334 sv_setiv($arg, (IV)$var);
336 sv_setuv($arg, (UV)$var);
338 sv_setiv($arg, (IV)$var);
342 sv_setpvn($arg, "0 but true", 10);
344 sv_setiv($arg, (IV)$var);
347 sv_setiv($arg, (IV)$var);
349 ${"$var" eq "RETVAL" ? \"$arg = boolSV($var);" : \"sv_setsv($arg, boolSV($var));"}
351 sv_setuv($arg, (UV)$var);
353 sv_setiv($arg, (IV)$var);
355 sv_setuv($arg, (UV)$var);
357 sv_setiv($arg, (IV)$var);
359 sv_setuv($arg, (UV)$var);
361 sv_setpvn($arg, (char *)&$var, 1);
363 sv_setuv($arg, (UV)$var);
365 sv_setnv($arg, (double)$var);
367 sv_setnv($arg, (NV)$var);
369 sv_setnv($arg, (double)$var);
371 sv_setpv((SV*)$arg, $var);
373 sv_setpv((SV*)$arg, $var);
375 sv_setiv($arg, PTR2IV($var));
377 sv_setref_pv($arg, Nullch, (void*)$var);
379 sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
381 sv_setref_pv($arg, \"${ntype}\", (void*)$var);
383 sv_setref_pv($arg, \"${ntype}\", (void*)$var);
385 sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
391 sv_setpvn($arg, (char *)&$var, sizeof($var));
393 sv_setpvn($arg, (char *)$var, sizeof(*$var));
395 XS_pack_$ntype($arg, $var);
397 XS_pack_$ntype($arg, $var, count_$ntype);
401 EXTEND(SP,size_$var);
402 for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
403 ST(ix_$var) = sv_newmortal();
409 GV *gv = newGVgen("$Package");
410 PerlIO *fp = PerlIO_importFILE($var,0);
411 if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
412 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
418 GV *gv = newGVgen("$Package");
419 if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
420 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
426 GV *gv = newGVgen("$Package");
427 if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
428 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
434 GV *gv = newGVgen("$Package");
435 if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
436 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));