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