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