This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Silence new warning grep in void context warning in various modules and test files...
[perl5.git] / lib / ExtUtils / typemap
CommitLineData
93a17b20 1# basic C types
85e6fe83 2int T_IV
3aa35033
GS
3unsigned T_UV
4unsigned int T_UV
a0d0e21e 5long T_IV
3aa35033 6unsigned long T_UV
85e6fe83 7short T_IV
3aa35033 8unsigned short T_UV
93a17b20 9char T_CHAR
85e6fe83 10unsigned char T_U_CHAR
a0d0e21e
LW
11char * T_PV
12unsigned char * T_PV
f8c11764 13const char * T_PV
a0d0e21e
LW
14caddr_t T_PV
15wchar_t * T_PV
16wchar_t T_IV
d2b7433c 17# bool_t is defined in <rpc/rpc.h>
a0d0e21e 18bool_t T_IV
12734836 19size_t T_UV
a0d0e21e
LW
20ssize_t T_IV
21time_t T_NV
93a17b20 22unsigned long * T_OPAQUEPTR
5abff6f9 23char ** T_PACKEDARRAY
93a17b20 24void * T_PTR
a0d0e21e 25Time_t * T_PV
2304df62 26SV * T_SV
a0d0e21e
LW
27SVREF T_SVREF
28AV * T_AVREF
29HV * T_HVREF
30CV * T_CVREF
93a17b20 31
a0d0e21e 32IV T_IV
0ca04487 33UV T_UV
f8c11764 34NV T_NV
85e6fe83
LW
35I32 T_IV
36I16 T_IV
37I8 T_IV
12734836 38STRLEN T_UV
93a17b20
LW
39U32 T_U_LONG
40U16 T_U_SHORT
3aa35033 41U8 T_UV
93a17b20 42Result T_U_CHAR
f8c11764
TJ
43Boolean T_BOOL
44float T_FLOAT
93a17b20 45double T_DOUBLE
2304df62 46SysRet T_SYSRET
a0d0e21e 47SysRetLong T_SYSRET
f7e7eb72
NIS
48FILE * T_STDIO
49PerlIO * T_INOUT
a0d0e21e
LW
50FileHandle T_PTROBJ
51InputStream T_IN
52InOutStream T_INOUT
53OutputStream T_OUT
1cc23d7f 54bool T_BOOL
93a17b20 55
8990e307
LW
56#############################################################################
57INPUT
2304df62 58T_SV
a0d0e21e
LW
59 $var = $arg
60T_SVREF
f8c11764 61 if (SvROK($arg))
a0d0e21e 62 $var = (SV*)SvRV($arg);
2304df62 63 else
52c93dd1
AT
64 Perl_croak(aTHX_ \"%s: %s is not a reference\",
65 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
66 \"$var\")
a0d0e21e 67T_AVREF
f8c11764 68 if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV)
2304df62
AD
69 $var = (AV*)SvRV($arg);
70 else
52c93dd1
AT
71 Perl_croak(aTHX_ \"%s: %s is not an array reference\",
72 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
73 \"$var\")
a0d0e21e 74T_HVREF
f8c11764 75 if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV)
2304df62
AD
76 $var = (HV*)SvRV($arg);
77 else
52c93dd1
AT
78 Perl_croak(aTHX_ \"%s: %s is not a hash reference\",
79 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
80 \"$var\")
a0d0e21e 81T_CVREF
f8c11764 82 if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVCV)
2304df62
AD
83 $var = (CV*)SvRV($arg);
84 else
52c93dd1
AT
85 Perl_croak(aTHX_ \"%s: %s is not a code reference\",
86 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
87 \"$var\")
2304df62
AD
88T_SYSRET
89 $var NOT IMPLEMENTED
3aa35033
GS
90T_UV
91 $var = ($type)SvUV($arg)
85e6fe83
LW
92T_IV
93 $var = ($type)SvIV($arg)
8990e307
LW
94T_INT
95 $var = (int)SvIV($arg)
96T_ENUM
97 $var = ($type)SvIV($arg)
1cc23d7f 98T_BOOL
f8c11764 99 $var = (bool)SvTRUE($arg)
8990e307 100T_U_INT
3aa35033 101 $var = (unsigned int)SvUV($arg)
8990e307
LW
102T_SHORT
103 $var = (short)SvIV($arg)
104T_U_SHORT
3aa35033 105 $var = (unsigned short)SvUV($arg)
8990e307
LW
106T_LONG
107 $var = (long)SvIV($arg)
108T_U_LONG
3aa35033 109 $var = (unsigned long)SvUV($arg)
8990e307 110T_CHAR
3521e4ee 111 $var = (char)*SvPV_nolen($arg)
8990e307 112T_U_CHAR
3aa35033 113 $var = (unsigned char)SvUV($arg)
8990e307
LW
114T_FLOAT
115 $var = (float)SvNV($arg)
85e6fe83
LW
116T_NV
117 $var = ($type)SvNV($arg)
8990e307 118T_DOUBLE
85e6fe83 119 $var = (double)SvNV($arg)
a0d0e21e 120T_PV
3521e4ee 121 $var = ($type)SvPV_nolen($arg)
8990e307 122T_PTR
56431972 123 $var = INT2PTR($type,SvIV($arg))
8990e307 124T_PTRREF
85e6fe83 125 if (SvROK($arg)) {
a0d0e21e 126 IV tmp = SvIV((SV*)SvRV($arg));
56431972 127 $var = INT2PTR($type,tmp);
85e6fe83 128 }
8990e307 129 else
52c93dd1
AT
130 Perl_croak(aTHX_ \"%s: %s is not a reference\",
131 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
132 \"$var\")
a0d0e21e 133T_REF_IV_REF
5abff6f9 134 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 135 IV tmp = SvIV((SV*)SvRV($arg));
c725d115 136 $var = *INT2PTR($type *, tmp);
a0d0e21e
LW
137 }
138 else
52c93dd1
AT
139 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
140 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
141 \"$var\", \"$ntype\")
a0d0e21e 142T_REF_IV_PTR
f8c11764 143 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 144 IV tmp = SvIV((SV*)SvRV($arg));
c725d115 145 $var = INT2PTR($type, tmp);
a0d0e21e
LW
146 }
147 else
52c93dd1
AT
148 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
149 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
150 \"$var\", \"$ntype\")
8990e307 151T_PTROBJ
55497cff 152 if (sv_derived_from($arg, \"${ntype}\")) {
a0d0e21e 153 IV tmp = SvIV((SV*)SvRV($arg));
56431972 154 $var = INT2PTR($type,tmp);
85e6fe83 155 }
8990e307 156 else
52c93dd1
AT
157 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
158 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
159 \"$var\", \"$ntype\")
8990e307
LW
160T_PTRDESC
161 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 162 IV tmp = SvIV((SV*)SvRV($arg));
f7e7eb72 163 ${type}_desc = (\U${type}_DESC\E*) tmp;
8990e307
LW
164 $var = ${type}_desc->ptr;
165 }
166 else
52c93dd1
AT
167 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
168 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
169 \"$var\", \"$ntype\")
8990e307 170T_REFREF
85e6fe83 171 if (SvROK($arg)) {
a0d0e21e 172 IV tmp = SvIV((SV*)SvRV($arg));
56431972 173 $var = *INT2PTR($type,tmp);
85e6fe83 174 }
8990e307 175 else
52c93dd1
AT
176 Perl_croak(aTHX_ \"%s: %s is not a reference\",
177 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
178 \"$var\")
8990e307 179T_REFOBJ
85e6fe83 180 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 181 IV tmp = SvIV((SV*)SvRV($arg));
56431972 182 $var = *INT2PTR($type,tmp);
85e6fe83 183 }
8990e307 184 else
52c93dd1
AT
185 Perl_croak(aTHX_ \"%s: %s is not of type %s\",
186 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
187 \"$var\", \"$ntype\")
8990e307 188T_OPAQUE
3521e4ee 189 $var = *($type *)SvPV_nolen($arg)
8990e307 190T_OPAQUEPTR
3521e4ee 191 $var = ($type)SvPV_nolen($arg)
8990e307
LW
192T_PACKED
193 $var = XS_unpack_$ntype($arg)
194T_PACKEDARRAY
195 $var = XS_unpack_$ntype($arg)
196T_CALLBACK
197 $var = make_perl_cb_$type($arg)
198T_ARRAY
8990e307 199 U32 ix_$var = $argoff;
f8c11764 200 $var = $ntype(items -= $argoff);
8990e307
LW
201 while (items--) {
202 DO_ARRAY_ELEM;
f8c11764 203 ix_$var++;
8990e307 204 }
f8c11764
TJ
205 /* this is the number of elements in the array */
206 ix_$var -= $argoff
f7e7eb72
NIS
207T_STDIO
208 $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
a0d0e21e
LW
209T_IN
210 $var = IoIFP(sv_2io($arg))
211T_INOUT
212 $var = IoIFP(sv_2io($arg))
213T_OUT
214 $var = IoOFP(sv_2io($arg))
8990e307
LW
215#############################################################################
216OUTPUT
2304df62
AD
217T_SV
218 $arg = $var;
a0d0e21e 219T_SVREF
2304df62 220 $arg = newRV((SV*)$var);
a0d0e21e 221T_AVREF
2304df62 222 $arg = newRV((SV*)$var);
a0d0e21e 223T_HVREF
2304df62 224 $arg = newRV((SV*)$var);
a0d0e21e 225T_CVREF
2304df62 226 $arg = newRV((SV*)$var);
85e6fe83 227T_IV
ef50df4b 228 sv_setiv($arg, (IV)$var);
3aa35033
GS
229T_UV
230 sv_setuv($arg, (UV)$var);
8990e307 231T_INT
ef50df4b 232 sv_setiv($arg, (IV)$var);
2304df62
AD
233T_SYSRET
234 if ($var != -1) {
235 if ($var == 0)
ef50df4b 236 sv_setpvn($arg, "0 but true", 10);
2304df62 237 else
ef50df4b 238 sv_setiv($arg, (IV)$var);
2304df62 239 }
8990e307 240T_ENUM
ef50df4b 241 sv_setiv($arg, (IV)$var);
1cc23d7f 242T_BOOL
54310121 243 $arg = boolSV($var);
8990e307 244T_U_INT
3aa35033 245 sv_setuv($arg, (UV)$var);
8990e307 246T_SHORT
ef50df4b 247 sv_setiv($arg, (IV)$var);
8990e307 248T_U_SHORT
3aa35033 249 sv_setuv($arg, (UV)$var);
8990e307 250T_LONG
ef50df4b 251 sv_setiv($arg, (IV)$var);
8990e307 252T_U_LONG
3aa35033 253 sv_setuv($arg, (UV)$var);
8990e307 254T_CHAR
ef50df4b 255 sv_setpvn($arg, (char *)&$var, 1);
8990e307 256T_U_CHAR
3aa35033 257 sv_setuv($arg, (UV)$var);
8990e307 258T_FLOAT
ef50df4b 259 sv_setnv($arg, (double)$var);
85e6fe83 260T_NV
59f3815a 261 sv_setnv($arg, (NV)$var);
8990e307 262T_DOUBLE
ef50df4b 263 sv_setnv($arg, (double)$var);
a0d0e21e 264T_PV
ef50df4b 265 sv_setpv((SV*)$arg, $var);
8990e307 266T_PTR
46e87256 267 sv_setiv($arg, PTR2IV($var));
8990e307 268T_PTRREF
a0d0e21e
LW
269 sv_setref_pv($arg, Nullch, (void*)$var);
270T_REF_IV_REF
271 sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
272T_REF_IV_PTR
273 sv_setref_pv($arg, \"${ntype}\", (void*)$var);
8990e307 274T_PTROBJ
a0d0e21e 275 sv_setref_pv($arg, \"${ntype}\", (void*)$var);
8990e307 276T_PTRDESC
a0d0e21e 277 sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
8990e307 278T_REFREF
f8c11764 279 NOT_IMPLEMENTED
8990e307
LW
280T_REFOBJ
281 NOT IMPLEMENTED
282T_OPAQUE
ef50df4b 283 sv_setpvn($arg, (char *)&$var, sizeof($var));
8990e307 284T_OPAQUEPTR
4bd3d083 285 sv_setpvn($arg, (char *)$var, sizeof(*$var));
8990e307
LW
286T_PACKED
287 XS_pack_$ntype($arg, $var);
288T_PACKEDARRAY
289 XS_pack_$ntype($arg, $var, count_$ntype);
290T_DATAUNIT
ef50df4b 291 sv_setpvn($arg, $var.chp(), $var.size());
8990e307 292T_CALLBACK
ef50df4b 293 sv_setpvn($arg, $var.context.value().chp(),
8990e307
LW
294 $var.context.value().size());
295T_ARRAY
f8c11764
TJ
296 {
297 U32 ix_$var;
298 EXTEND(SP,size_$var);
299 for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
8990e307
LW
300 ST(ix_$var) = sv_newmortal();
301 DO_ARRAY_ELEM
f8c11764
TJ
302 }
303 }
f7e7eb72
NIS
304T_STDIO
305 {
306 GV *gv = newGVgen("$Package");
307 PerlIO *fp = PerlIO_importFILE($var,0);
308 if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
309 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
310 else
311 $arg = &PL_sv_undef;
312 }
a0d0e21e
LW
313T_IN
314 {
315 GV *gv = newGVgen("$Package");
c07a80fd 316 if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
ef50df4b 317 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
a0d0e21e 318 else
6b88bc9c 319 $arg = &PL_sv_undef;
a0d0e21e
LW
320 }
321T_INOUT
322 {
323 GV *gv = newGVgen("$Package");
c07a80fd 324 if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
ef50df4b 325 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
a0d0e21e 326 else
6b88bc9c 327 $arg = &PL_sv_undef;
a0d0e21e
LW
328 }
329T_OUT
330 {
331 GV *gv = newGVgen("$Package");
c07a80fd 332 if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
ef50df4b 333 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
a0d0e21e 334 else
6b88bc9c 335 $arg = &PL_sv_undef;
a0d0e21e 336 }