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