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