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