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