1898184e3Ssthen# basic C types
2898184e3Ssthenint			T_IV
3898184e3Ssthenunsigned		T_UV
4898184e3Ssthenunsigned int		T_UV
5898184e3Ssthenlong			T_IV
6898184e3Ssthenunsigned long		T_UV
7898184e3Ssthenshort			T_IV
8898184e3Ssthenunsigned short		T_UV
9898184e3Ssthenchar			T_CHAR
10898184e3Ssthenunsigned char		T_U_CHAR
11898184e3Ssthenchar *			T_PV
12898184e3Ssthenunsigned char *		T_PV
13898184e3Ssthenconst char *		T_PV
14898184e3Ssthencaddr_t			T_PV
15898184e3Ssthenwchar_t *		T_PV
16898184e3Ssthenwchar_t			T_IV
17898184e3Ssthen# bool_t is defined in <rpc/rpc.h>
18898184e3Ssthenbool_t			T_IV
19898184e3Ssthensize_t			T_UV
20898184e3Ssthenssize_t			T_IV
21898184e3Ssthentime_t			T_NV
22898184e3Ssthenunsigned long *		T_OPAQUEPTR
23898184e3Ssthenchar **			T_PACKEDARRAY
24898184e3Ssthenvoid *			T_PTR
25898184e3SsthenTime_t *		T_PV
26898184e3SsthenSV *			T_SV
27898184e3SsthenSVREF			T_SVREF
28898184e3SsthenAV *			T_AVREF
29898184e3SsthenHV *			T_HVREF
30898184e3SsthenCV *			T_CVREF
31898184e3Ssthen
32898184e3SsthenIV			T_IV
33898184e3SsthenUV			T_UV
34898184e3SsthenNV                      T_NV
35898184e3SsthenI32			T_IV
36898184e3SsthenI16			T_IV
37898184e3SsthenI8			T_IV
38898184e3SsthenSTRLEN			T_UV
39898184e3SsthenU32			T_U_LONG
40898184e3SsthenU16			T_U_SHORT
41898184e3SsthenU8			T_UV
42898184e3SsthenResult			T_U_CHAR
43898184e3SsthenBoolean			T_BOOL
44898184e3Ssthenfloat                   T_FLOAT
45898184e3Ssthendouble			T_DOUBLE
46898184e3SsthenSysRet			T_SYSRET
47898184e3SsthenSysRetLong		T_SYSRET
48898184e3SsthenFILE *			T_STDIO
49898184e3SsthenPerlIO *		T_INOUT
50898184e3SsthenFileHandle		T_PTROBJ
51898184e3SsthenInputStream		T_IN
52898184e3SsthenInOutStream		T_INOUT
53898184e3SsthenOutputStream		T_OUT
54898184e3Ssthenbool			T_BOOL
55898184e3Ssthen
56898184e3Ssthen#############################################################################
57898184e3SsthenINPUT
58898184e3SsthenT_SV
59898184e3Ssthen	$var = $arg
60898184e3SsthenT_SVREF
61898184e3Ssthen	if (SvROK($arg))
62898184e3Ssthen	    $var = (SV*)SvRV($arg);
63898184e3Ssthen	else
64898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not a reference\",
65898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
66898184e3Ssthen			\"$var\")
67898184e3SsthenT_AVREF
68898184e3Ssthen	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV)
69898184e3Ssthen	    $var = (AV*)SvRV($arg);
70898184e3Ssthen	else
71898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not an array reference\",
72898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
73898184e3Ssthen			\"$var\")
74898184e3SsthenT_HVREF
75898184e3Ssthen	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV)
76898184e3Ssthen	    $var = (HV*)SvRV($arg);
77898184e3Ssthen	else
78898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not a hash reference\",
79898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
80898184e3Ssthen			\"$var\")
81898184e3SsthenT_CVREF
82898184e3Ssthen	if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVCV)
83898184e3Ssthen	    $var = (CV*)SvRV($arg);
84898184e3Ssthen	else
85898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not a code reference\",
86898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
87898184e3Ssthen			\"$var\")
88898184e3SsthenT_SYSRET
89898184e3Ssthen	$var NOT IMPLEMENTED
90898184e3SsthenT_UV
91898184e3Ssthen	$var = ($type)SvUV($arg)
92898184e3SsthenT_IV
93898184e3Ssthen	$var = ($type)SvIV($arg)
94898184e3SsthenT_INT
95898184e3Ssthen	$var = (int)SvIV($arg)
96898184e3SsthenT_ENUM
97898184e3Ssthen	$var = ($type)SvIV($arg)
98898184e3SsthenT_BOOL
99898184e3Ssthen	$var = (bool)SvTRUE($arg)
100898184e3SsthenT_U_INT
101898184e3Ssthen	$var = (unsigned int)SvUV($arg)
102898184e3SsthenT_SHORT
103898184e3Ssthen	$var = (short)SvIV($arg)
104898184e3SsthenT_U_SHORT
105898184e3Ssthen	$var = (unsigned short)SvUV($arg)
106898184e3SsthenT_LONG
107898184e3Ssthen	$var = (long)SvIV($arg)
108898184e3SsthenT_U_LONG
109898184e3Ssthen	$var = (unsigned long)SvUV($arg)
110898184e3SsthenT_CHAR
111898184e3Ssthen	$var = (char)*SvPV_nolen($arg)
112898184e3SsthenT_U_CHAR
113898184e3Ssthen	$var = (unsigned char)SvUV($arg)
114898184e3SsthenT_FLOAT
115898184e3Ssthen	$var = (float)SvNV($arg)
116898184e3SsthenT_NV
117898184e3Ssthen	$var = ($type)SvNV($arg)
118898184e3SsthenT_DOUBLE
119898184e3Ssthen	$var = (double)SvNV($arg)
120898184e3SsthenT_PV
121898184e3Ssthen	$var = ($type)SvPV_nolen($arg)
122898184e3SsthenT_PTR
123898184e3Ssthen	$var = INT2PTR($type,SvIV($arg))
124898184e3SsthenT_PTRREF
125898184e3Ssthen	if (SvROK($arg)) {
126898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
127898184e3Ssthen	    $var = INT2PTR($type,tmp);
128898184e3Ssthen	}
129898184e3Ssthen	else
130898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not a reference\",
131898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
132898184e3Ssthen			\"$var\")
133898184e3SsthenT_REF_IV_REF
134898184e3Ssthen	if (sv_isa($arg, \"${ntype}\")) {
135898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
136898184e3Ssthen	    $var = *INT2PTR($type *, tmp);
137898184e3Ssthen	}
138898184e3Ssthen	else
139898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not of type %s\",
140898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
141898184e3Ssthen			\"$var\", \"$ntype\")
142898184e3SsthenT_REF_IV_PTR
143898184e3Ssthen	if (sv_isa($arg, \"${ntype}\")) {
144898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
145898184e3Ssthen	    $var = INT2PTR($type, tmp);
146898184e3Ssthen	}
147898184e3Ssthen	else
148898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not of type %s\",
149898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
150898184e3Ssthen			\"$var\", \"$ntype\")
151898184e3SsthenT_PTROBJ
152898184e3Ssthen	if (sv_derived_from($arg, \"${ntype}\")) {
153898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
154898184e3Ssthen	    $var = INT2PTR($type,tmp);
155898184e3Ssthen	}
156898184e3Ssthen	else
157898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not of type %s\",
158898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
159898184e3Ssthen			\"$var\", \"$ntype\")
160898184e3SsthenT_PTRDESC
161898184e3Ssthen	if (sv_isa($arg, \"${ntype}\")) {
162898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
163898184e3Ssthen	    ${type}_desc = (\U${type}_DESC\E*) tmp;
164898184e3Ssthen	    $var = ${type}_desc->ptr;
165898184e3Ssthen	}
166898184e3Ssthen	else
167898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not of type %s\",
168898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
169898184e3Ssthen			\"$var\", \"$ntype\")
170898184e3SsthenT_REFREF
171898184e3Ssthen	if (SvROK($arg)) {
172898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
173898184e3Ssthen	    $var = *INT2PTR($type,tmp);
174898184e3Ssthen	}
175898184e3Ssthen	else
176898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not a reference\",
177898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
178898184e3Ssthen			\"$var\")
179898184e3SsthenT_REFOBJ
180898184e3Ssthen	if (sv_isa($arg, \"${ntype}\")) {
181898184e3Ssthen	    IV tmp = SvIV((SV*)SvRV($arg));
182898184e3Ssthen	    $var = *INT2PTR($type,tmp);
183898184e3Ssthen	}
184898184e3Ssthen	else
185898184e3Ssthen	    Perl_croak(aTHX_ \"%s: %s is not of type %s\",
186898184e3Ssthen			${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
187898184e3Ssthen			\"$var\", \"$ntype\")
188898184e3SsthenT_OPAQUE
189898184e3Ssthen	$var = *($type *)SvPV_nolen($arg)
190898184e3SsthenT_OPAQUEPTR
191898184e3Ssthen	$var = ($type)SvPV_nolen($arg)
192898184e3SsthenT_PACKED
193898184e3Ssthen	$var = XS_unpack_$ntype($arg)
194898184e3SsthenT_PACKEDARRAY
195898184e3Ssthen	$var = XS_unpack_$ntype($arg)
196898184e3SsthenT_CALLBACK
197898184e3Ssthen	$var = make_perl_cb_$type($arg)
198898184e3SsthenT_ARRAY
199898184e3Ssthen	U32 ix_$var = $argoff;
200898184e3Ssthen	$var = $ntype(items -= $argoff);
201898184e3Ssthen	while (items--) {
202898184e3Ssthen	    DO_ARRAY_ELEM;
203898184e3Ssthen	    ix_$var++;
204898184e3Ssthen	}
205898184e3Ssthen        /* this is the number of elements in the array */
206898184e3Ssthen        ix_$var -= $argoff
207898184e3SsthenT_STDIO
208898184e3Ssthen	$var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
209898184e3SsthenT_IN
210898184e3Ssthen	$var = IoIFP(sv_2io($arg))
211898184e3SsthenT_INOUT
212898184e3Ssthen	$var = IoIFP(sv_2io($arg))
213898184e3SsthenT_OUT
214898184e3Ssthen	$var = IoOFP(sv_2io($arg))
215898184e3Ssthen#############################################################################
216898184e3SsthenOUTPUT
217898184e3SsthenT_SV
218898184e3Ssthen	$arg = $var;
219898184e3SsthenT_SVREF
220898184e3Ssthen	$arg = newRV((SV*)$var);
221898184e3SsthenT_AVREF
222898184e3Ssthen	$arg = newRV((SV*)$var);
223898184e3SsthenT_HVREF
224898184e3Ssthen	$arg = newRV((SV*)$var);
225898184e3SsthenT_CVREF
226898184e3Ssthen	$arg = newRV((SV*)$var);
227898184e3SsthenT_IV
228898184e3Ssthen	sv_setiv($arg, (IV)$var);
229898184e3SsthenT_UV
230898184e3Ssthen	sv_setuv($arg, (UV)$var);
231898184e3SsthenT_INT
232898184e3Ssthen	sv_setiv($arg, (IV)$var);
233898184e3SsthenT_SYSRET
234898184e3Ssthen	if ($var != -1) {
235898184e3Ssthen	    if ($var == 0)
236898184e3Ssthen		sv_setpvn($arg, "0 but true", 10);
237898184e3Ssthen	    else
238898184e3Ssthen		sv_setiv($arg, (IV)$var);
239898184e3Ssthen	}
240898184e3SsthenT_ENUM
241898184e3Ssthen	sv_setiv($arg, (IV)$var);
242898184e3SsthenT_BOOL
243*6fb12b70Safresh1	${"$var" eq "RETVAL" ? \"$arg = boolSV($var);" : \"sv_setsv($arg, boolSV($var));"}
244898184e3SsthenT_U_INT
245898184e3Ssthen	sv_setuv($arg, (UV)$var);
246898184e3SsthenT_SHORT
247898184e3Ssthen	sv_setiv($arg, (IV)$var);
248898184e3SsthenT_U_SHORT
249898184e3Ssthen	sv_setuv($arg, (UV)$var);
250898184e3SsthenT_LONG
251898184e3Ssthen	sv_setiv($arg, (IV)$var);
252898184e3SsthenT_U_LONG
253898184e3Ssthen	sv_setuv($arg, (UV)$var);
254898184e3SsthenT_CHAR
255898184e3Ssthen	sv_setpvn($arg, (char *)&$var, 1);
256898184e3SsthenT_U_CHAR
257898184e3Ssthen	sv_setuv($arg, (UV)$var);
258898184e3SsthenT_FLOAT
259898184e3Ssthen	sv_setnv($arg, (double)$var);
260898184e3SsthenT_NV
261898184e3Ssthen	sv_setnv($arg, (NV)$var);
262898184e3SsthenT_DOUBLE
263898184e3Ssthen	sv_setnv($arg, (double)$var);
264898184e3SsthenT_PV
265898184e3Ssthen	sv_setpv((SV*)$arg, $var);
266898184e3SsthenT_PTR
267898184e3Ssthen	sv_setiv($arg, PTR2IV($var));
268898184e3SsthenT_PTRREF
269898184e3Ssthen	sv_setref_pv($arg, Nullch, (void*)$var);
270898184e3SsthenT_REF_IV_REF
271898184e3Ssthen	sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
272898184e3SsthenT_REF_IV_PTR
273898184e3Ssthen	sv_setref_pv($arg, \"${ntype}\", (void*)$var);
274898184e3SsthenT_PTROBJ
275898184e3Ssthen	sv_setref_pv($arg, \"${ntype}\", (void*)$var);
276898184e3SsthenT_PTRDESC
277898184e3Ssthen	sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
278898184e3SsthenT_REFREF
279898184e3Ssthen	NOT_IMPLEMENTED
280898184e3SsthenT_REFOBJ
281898184e3Ssthen	NOT IMPLEMENTED
282898184e3SsthenT_OPAQUE
283898184e3Ssthen	sv_setpvn($arg, (char *)&$var, sizeof($var));
284898184e3SsthenT_OPAQUEPTR
285898184e3Ssthen	sv_setpvn($arg, (char *)$var, sizeof(*$var));
286898184e3SsthenT_PACKED
287898184e3Ssthen	XS_pack_$ntype($arg, $var);
288898184e3SsthenT_PACKEDARRAY
289898184e3Ssthen	XS_pack_$ntype($arg, $var, count_$ntype);
290898184e3SsthenT_DATAUNIT
291898184e3Ssthen	sv_setpvn($arg, $var.chp(), $var.size());
292898184e3SsthenT_CALLBACK
293898184e3Ssthen	sv_setpvn($arg, $var.context.value().chp(),
294898184e3Ssthen		$var.context.value().size());
295898184e3SsthenT_ARRAY
296898184e3Ssthen        {
297898184e3Ssthen	    U32 ix_$var;
298898184e3Ssthen	    EXTEND(SP,size_$var);
299898184e3Ssthen	    for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
300898184e3Ssthen		ST(ix_$var) = sv_newmortal();
301898184e3Ssthen	DO_ARRAY_ELEM
302898184e3Ssthen	    }
303898184e3Ssthen        }
304898184e3SsthenT_STDIO
305898184e3Ssthen	{
306898184e3Ssthen	    GV *gv = newGVgen("$Package");
307898184e3Ssthen	    PerlIO *fp = PerlIO_importFILE($var,0);
308898184e3Ssthen	    if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
309898184e3Ssthen		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
310898184e3Ssthen	    else
311898184e3Ssthen		$arg = &PL_sv_undef;
312898184e3Ssthen	}
313898184e3SsthenT_IN
314898184e3Ssthen	{
315898184e3Ssthen	    GV *gv = newGVgen("$Package");
316898184e3Ssthen	    if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
317898184e3Ssthen		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
318898184e3Ssthen	    else
319898184e3Ssthen		$arg = &PL_sv_undef;
320898184e3Ssthen	}
321898184e3SsthenT_INOUT
322898184e3Ssthen	{
323898184e3Ssthen	    GV *gv = newGVgen("$Package");
324898184e3Ssthen	    if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
325898184e3Ssthen		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
326898184e3Ssthen	    else
327898184e3Ssthen		$arg = &PL_sv_undef;
328898184e3Ssthen	}
329898184e3SsthenT_OUT
330898184e3Ssthen	{
331898184e3Ssthen	    GV *gv = newGVgen("$Package");
332898184e3Ssthen	    if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
333898184e3Ssthen		sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
334898184e3Ssthen	    else
335898184e3Ssthen		$arg = &PL_sv_undef;
336898184e3Ssthen	}
337