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_ \"%s: %s is not a reference\", 65 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 66 \"$var\") 67T_AVREF 68 if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV) 69 $var = (AV*)SvRV($arg); 70 else 71 Perl_croak(aTHX_ \"%s: %s is not an array reference\", 72 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 73 \"$var\") 74T_HVREF 75 if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV) 76 $var = (HV*)SvRV($arg); 77 else 78 Perl_croak(aTHX_ \"%s: %s is not a hash reference\", 79 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 80 \"$var\") 81T_CVREF 82 if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVCV) 83 $var = (CV*)SvRV($arg); 84 else 85 Perl_croak(aTHX_ \"%s: %s is not a code reference\", 86 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 87 \"$var\") 88T_SYSRET 89 $var NOT IMPLEMENTED 90T_UV 91 $var = ($type)SvUV($arg) 92T_IV 93 $var = ($type)SvIV($arg) 94T_INT 95 $var = (int)SvIV($arg) 96T_ENUM 97 $var = ($type)SvIV($arg) 98T_BOOL 99 $var = (bool)SvTRUE($arg) 100T_U_INT 101 $var = (unsigned int)SvUV($arg) 102T_SHORT 103 $var = (short)SvIV($arg) 104T_U_SHORT 105 $var = (unsigned short)SvUV($arg) 106T_LONG 107 $var = (long)SvIV($arg) 108T_U_LONG 109 $var = (unsigned long)SvUV($arg) 110T_CHAR 111 $var = (char)*SvPV_nolen($arg) 112T_U_CHAR 113 $var = (unsigned char)SvUV($arg) 114T_FLOAT 115 $var = (float)SvNV($arg) 116T_NV 117 $var = ($type)SvNV($arg) 118T_DOUBLE 119 $var = (double)SvNV($arg) 120T_PV 121 $var = ($type)SvPV_nolen($arg) 122T_PTR 123 $var = INT2PTR($type,SvIV($arg)) 124T_PTRREF 125 if (SvROK($arg)) { 126 IV tmp = SvIV((SV*)SvRV($arg)); 127 $var = INT2PTR($type,tmp); 128 } 129 else 130 Perl_croak(aTHX_ \"%s: %s is not a reference\", 131 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 132 \"$var\") 133T_REF_IV_REF 134 if (sv_isa($arg, \"${ntype}\")) { 135 IV tmp = SvIV((SV*)SvRV($arg)); 136 $var = *INT2PTR($type *, tmp); 137 } 138 else 139 Perl_croak(aTHX_ \"%s: %s is not of type %s\", 140 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 141 \"$var\", \"$ntype\") 142T_REF_IV_PTR 143 if (sv_isa($arg, \"${ntype}\")) { 144 IV tmp = SvIV((SV*)SvRV($arg)); 145 $var = INT2PTR($type, tmp); 146 } 147 else 148 Perl_croak(aTHX_ \"%s: %s is not of type %s\", 149 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 150 \"$var\", \"$ntype\") 151T_PTROBJ 152 if (sv_derived_from($arg, \"${ntype}\")) { 153 IV tmp = SvIV((SV*)SvRV($arg)); 154 $var = INT2PTR($type,tmp); 155 } 156 else 157 Perl_croak(aTHX_ \"%s: %s is not of type %s\", 158 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 159 \"$var\", \"$ntype\") 160T_PTRDESC 161 if (sv_isa($arg, \"${ntype}\")) { 162 IV tmp = SvIV((SV*)SvRV($arg)); 163 ${type}_desc = (\U${type}_DESC\E*) tmp; 164 $var = ${type}_desc->ptr; 165 } 166 else 167 Perl_croak(aTHX_ \"%s: %s is not of type %s\", 168 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 169 \"$var\", \"$ntype\") 170T_REFREF 171 if (SvROK($arg)) { 172 IV tmp = SvIV((SV*)SvRV($arg)); 173 $var = *INT2PTR($type,tmp); 174 } 175 else 176 Perl_croak(aTHX_ \"%s: %s is not a reference\", 177 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 178 \"$var\") 179T_REFOBJ 180 if (sv_isa($arg, \"${ntype}\")) { 181 IV tmp = SvIV((SV*)SvRV($arg)); 182 $var = *INT2PTR($type,tmp); 183 } 184 else 185 Perl_croak(aTHX_ \"%s: %s is not of type %s\", 186 ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, 187 \"$var\", \"$ntype\") 188T_OPAQUE 189 $var = *($type *)SvPV_nolen($arg) 190T_OPAQUEPTR 191 $var = ($type)SvPV_nolen($arg) 192T_PACKED 193 $var = XS_unpack_$ntype($arg) 194T_PACKEDARRAY 195 $var = XS_unpack_$ntype($arg) 196T_CALLBACK 197 $var = make_perl_cb_$type($arg) 198T_ARRAY 199 U32 ix_$var = $argoff; 200 $var = $ntype(items -= $argoff); 201 while (items--) { 202 DO_ARRAY_ELEM; 203 ix_$var++; 204 } 205 /* this is the number of elements in the array */ 206 ix_$var -= $argoff 207T_STDIO 208 $var = PerlIO_findFILE(IoIFP(sv_2io($arg))) 209T_IN 210 $var = IoIFP(sv_2io($arg)) 211T_INOUT 212 $var = IoIFP(sv_2io($arg)) 213T_OUT 214 $var = IoOFP(sv_2io($arg)) 215############################################################################# 216OUTPUT 217T_SV 218 $arg = $var; 219T_SVREF 220 $arg = newRV((SV*)$var); 221T_AVREF 222 $arg = newRV((SV*)$var); 223T_HVREF 224 $arg = newRV((SV*)$var); 225T_CVREF 226 $arg = newRV((SV*)$var); 227T_IV 228 sv_setiv($arg, (IV)$var); 229T_UV 230 sv_setuv($arg, (UV)$var); 231T_INT 232 sv_setiv($arg, (IV)$var); 233T_SYSRET 234 if ($var != -1) { 235 if ($var == 0) 236 sv_setpvn($arg, "0 but true", 10); 237 else 238 sv_setiv($arg, (IV)$var); 239 } 240T_ENUM 241 sv_setiv($arg, (IV)$var); 242T_BOOL 243 ${"$var" eq "RETVAL" ? \"$arg = boolSV($var);" : \"sv_setsv($arg, boolSV($var));"} 244T_U_INT 245 sv_setuv($arg, (UV)$var); 246T_SHORT 247 sv_setiv($arg, (IV)$var); 248T_U_SHORT 249 sv_setuv($arg, (UV)$var); 250T_LONG 251 sv_setiv($arg, (IV)$var); 252T_U_LONG 253 sv_setuv($arg, (UV)$var); 254T_CHAR 255 sv_setpvn($arg, (char *)&$var, 1); 256T_U_CHAR 257 sv_setuv($arg, (UV)$var); 258T_FLOAT 259 sv_setnv($arg, (double)$var); 260T_NV 261 sv_setnv($arg, (NV)$var); 262T_DOUBLE 263 sv_setnv($arg, (double)$var); 264T_PV 265 sv_setpv((SV*)$arg, $var); 266T_PTR 267 sv_setiv($arg, PTR2IV($var)); 268T_PTRREF 269 sv_setref_pv($arg, Nullch, (void*)$var); 270T_REF_IV_REF 271 sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var)); 272T_REF_IV_PTR 273 sv_setref_pv($arg, \"${ntype}\", (void*)$var); 274T_PTROBJ 275 sv_setref_pv($arg, \"${ntype}\", (void*)$var); 276T_PTRDESC 277 sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var)); 278T_REFREF 279 NOT_IMPLEMENTED 280T_REFOBJ 281 NOT IMPLEMENTED 282T_OPAQUE 283 sv_setpvn($arg, (char *)&$var, sizeof($var)); 284T_OPAQUEPTR 285 sv_setpvn($arg, (char *)$var, sizeof(*$var)); 286T_PACKED 287 XS_pack_$ntype($arg, $var); 288T_PACKEDARRAY 289 XS_pack_$ntype($arg, $var, count_$ntype); 290T_DATAUNIT 291 sv_setpvn($arg, $var.chp(), $var.size()); 292T_CALLBACK 293 sv_setpvn($arg, $var.context.value().chp(), 294 $var.context.value().size()); 295T_ARRAY 296 { 297 U32 ix_$var; 298 EXTEND(SP,size_$var); 299 for (ix_$var = 0; ix_$var < size_$var; ix_$var++) { 300 ST(ix_$var) = sv_newmortal(); 301 DO_ARRAY_ELEM 302 } 303 } 304T_STDIO 305 { 306 GV *gv = newGVgen("$Package"); 307 PerlIO *fp = PerlIO_importFILE($var,0); 308 if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) ) 309 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); 310 else 311 $arg = &PL_sv_undef; 312 } 313T_IN 314 { 315 GV *gv = newGVgen("$Package"); 316 if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) 317 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); 318 else 319 $arg = &PL_sv_undef; 320 } 321T_INOUT 322 { 323 GV *gv = newGVgen("$Package"); 324 if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) 325 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); 326 else 327 $arg = &PL_sv_undef; 328 } 329T_OUT 330 { 331 GV *gv = newGVgen("$Package"); 332 if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) 333 sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); 334 else 335 $arg = &PL_sv_undef; 336 } 337