Re: Debugger in beta3
[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
93a17b20 48
8990e307 49#############################################################################
50INPUT
2304df62 51T_SV
a0d0e21e 52 $var = $arg
53T_SVREF
2304df62 54 if (sv_isa($arg, \"${ntype}\"))
a0d0e21e 55 $var = (SV*)SvRV($arg);
2304df62 56 else
57 croak(\"$var is not of type ${ntype}\")
a0d0e21e 58T_AVREF
2304df62 59 if (sv_isa($arg, \"${ntype}\"))
60 $var = (AV*)SvRV($arg);
61 else
62 croak(\"$var is not of type ${ntype}\")
a0d0e21e 63T_HVREF
2304df62 64 if (sv_isa($arg, \"${ntype}\"))
65 $var = (HV*)SvRV($arg);
66 else
67 croak(\"$var is not of type ${ntype}\")
a0d0e21e 68T_CVREF
2304df62 69 if (sv_isa($arg, \"${ntype}\"))
70 $var = (CV*)SvRV($arg);
71 else
72 croak(\"$var is not of type ${ntype}\")
73T_SYSRET
74 $var NOT IMPLEMENTED
85e6fe83 75T_IV
76 $var = ($type)SvIV($arg)
8990e307 77T_INT
78 $var = (int)SvIV($arg)
79T_ENUM
80 $var = ($type)SvIV($arg)
81T_U_INT
82 $var = (unsigned int)SvIV($arg)
83T_SHORT
84 $var = (short)SvIV($arg)
85T_U_SHORT
86 $var = (unsigned short)SvIV($arg)
87T_LONG
88 $var = (long)SvIV($arg)
89T_U_LONG
90 $var = (unsigned long)SvIV($arg)
91T_CHAR
92 $var = (char)*SvPV($arg,na)
93T_U_CHAR
94 $var = (unsigned char)SvIV($arg)
95T_FLOAT
96 $var = (float)SvNV($arg)
85e6fe83 97T_NV
98 $var = ($type)SvNV($arg)
8990e307 99T_DOUBLE
85e6fe83 100 $var = (double)SvNV($arg)
a0d0e21e 101T_PV
102 $var = ($type)SvPV($arg,na)
8990e307 103T_PTR
a0d0e21e 104 $var = ($type)SvIV($arg)
8990e307 105T_PTRREF
85e6fe83 106 if (SvROK($arg)) {
a0d0e21e 107 IV tmp = SvIV((SV*)SvRV($arg));
85e6fe83 108 $var = ($type) tmp;
109 }
8990e307 110 else
111 croak(\"$var is not a reference\")
a0d0e21e 112T_REF_IV_REF
113 if (sv_isa($arg, \"${type}\")) {
114 IV tmp = SvIV((SV*)SvRV($arg));
115 $var = *($type *) tmp;
116 }
117 else
118 croak(\"$var is not of type ${ntype}\")
119T_REF_IV_PTR
120 if (sv_isa($arg, \"${type}\")) {
121 IV tmp = SvIV((SV*)SvRV($arg));
122 $var = ($type) tmp;
123 }
124 else
125 croak(\"$var is not of type ${ntype}\")
8990e307 126T_PTROBJ
85e6fe83 127 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 128 IV tmp = SvIV((SV*)SvRV($arg));
85e6fe83 129 $var = ($type) tmp;
130 }
8990e307 131 else
132 croak(\"$var is not of type ${ntype}\")
133T_PTRDESC
134 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 135 IV tmp = SvIV((SV*)SvRV($arg));
85e6fe83 136 ${type}_desc = (\U${type}_DESC\E*) tmp;
8990e307 137 $var = ${type}_desc->ptr;
138 }
139 else
140 croak(\"$var is not of type ${ntype}\")
141T_REFREF
85e6fe83 142 if (SvROK($arg)) {
a0d0e21e 143 IV tmp = SvIV((SV*)SvRV($arg));
85e6fe83 144 $var = *($type) tmp;
145 }
8990e307 146 else
147 croak(\"$var is not a reference\")
148T_REFOBJ
85e6fe83 149 if (sv_isa($arg, \"${ntype}\")) {
a0d0e21e 150 IV tmp = SvIV((SV*)SvRV($arg));
85e6fe83 151 $var = *($type) tmp;
152 }
8990e307 153 else
154 croak(\"$var is not of type ${ntype}\")
155T_OPAQUE
156 $var NOT IMPLEMENTED
157T_OPAQUEPTR
158 $var = ($type)SvPV($arg,na)
159T_PACKED
160 $var = XS_unpack_$ntype($arg)
161T_PACKEDARRAY
162 $var = XS_unpack_$ntype($arg)
163T_CALLBACK
164 $var = make_perl_cb_$type($arg)
165T_ARRAY
166 $var = $ntype(items -= $argoff);
167 U32 ix_$var = $argoff;
168 while (items--) {
169 DO_ARRAY_ELEM;
170 }
a0d0e21e 171T_IN
172 $var = IoIFP(sv_2io($arg))
173T_INOUT
174 $var = IoIFP(sv_2io($arg))
175T_OUT
176 $var = IoOFP(sv_2io($arg))
8990e307 177#############################################################################
178OUTPUT
2304df62 179T_SV
180 $arg = $var;
a0d0e21e 181T_SVREF
2304df62 182 $arg = newRV((SV*)$var);
a0d0e21e 183T_AVREF
2304df62 184 $arg = newRV((SV*)$var);
a0d0e21e 185T_HVREF
2304df62 186 $arg = newRV((SV*)$var);
a0d0e21e 187T_CVREF
2304df62 188 $arg = newRV((SV*)$var);
85e6fe83 189T_IV
a0d0e21e 190 sv_setiv($arg, (IV)$var);
8990e307 191T_INT
a0d0e21e 192 sv_setiv($arg, (IV)$var);
2304df62 193T_SYSRET
194 if ($var != -1) {
195 if ($var == 0)
196 sv_setpvn($arg, "0 but true", 10);
197 else
a0d0e21e 198 sv_setiv($arg, (IV)$var);
2304df62 199 }
8990e307 200T_ENUM
a0d0e21e 201 sv_setiv($arg, (IV)$var);
8990e307 202T_U_INT
a0d0e21e 203 sv_setiv($arg, (IV)$var);
8990e307 204T_SHORT
a0d0e21e 205 sv_setiv($arg, (IV)$var);
8990e307 206T_U_SHORT
a0d0e21e 207 sv_setiv($arg, (IV)$var);
8990e307 208T_LONG
a0d0e21e 209 sv_setiv($arg, (IV)$var);
8990e307 210T_U_LONG
a0d0e21e 211 sv_setiv($arg, (IV)$var);
8990e307 212T_CHAR
213 sv_setpvn($arg, (char *)&$var, 1);
214T_U_CHAR
a0d0e21e 215 sv_setiv($arg, (IV)$var);
8990e307 216T_FLOAT
217 sv_setnv($arg, (double)$var);
85e6fe83 218T_NV
219 sv_setnv($arg, (double)$var);
8990e307 220T_DOUBLE
85e6fe83 221 sv_setnv($arg, (double)$var);
a0d0e21e 222T_PV
223 sv_setpv((SV*)$arg, $var);
8990e307 224T_PTR
a0d0e21e 225 sv_setiv($arg, (IV)$var);
8990e307 226T_PTRREF
a0d0e21e 227 sv_setref_pv($arg, Nullch, (void*)$var);
228T_REF_IV_REF
229 sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
230T_REF_IV_PTR
231 sv_setref_pv($arg, \"${ntype}\", (void*)$var);
8990e307 232T_PTROBJ
a0d0e21e 233 sv_setref_pv($arg, \"${ntype}\", (void*)$var);
8990e307 234T_PTRDESC
a0d0e21e 235 sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
8990e307 236T_REFREF
237 sv_setrefref($arg, \"${ntype}\", XS_service_$ntype,
238 ($var ? (void*)new $ntype($var) : 0));
239T_REFOBJ
240 NOT IMPLEMENTED
241T_OPAQUE
242 sv_setpvn($arg, (char *)&$var, sizeof($var));
243T_OPAQUEPTR
244 sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var);
245T_PACKED
246 XS_pack_$ntype($arg, $var);
247T_PACKEDARRAY
248 XS_pack_$ntype($arg, $var, count_$ntype);
249T_DATAUNIT
250 sv_setpvn($arg, $var.chp(), $var.size());
251T_CALLBACK
252 sv_setpvn($arg, $var.context.value().chp(),
253 $var.context.value().size());
254T_ARRAY
255 ST_EXTEND($var.size);
256 for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) {
257 ST(ix_$var) = sv_newmortal();
258 DO_ARRAY_ELEM
259 }
260 sp += $var.size - 1;
a0d0e21e 261T_IN
262 {
263 GV *gv = newGVgen("$Package");
c07a80fd 264 if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
a0d0e21e 265 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
266 else
267 $arg = &sv_undef;
268 }
269T_INOUT
270 {
271 GV *gv = newGVgen("$Package");
c07a80fd 272 if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
a0d0e21e 273 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
274 else
275 $arg = &sv_undef;
276 }
277T_OUT
278 {
279 GV *gv = newGVgen("$Package");
c07a80fd 280 if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
a0d0e21e 281 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
282 else
283 $arg = &sv_undef;
284 }