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