buncha MacPerl patches for bleadperl
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / typemap
index 65970cf..c59c3dc 100644 (file)
@@ -1,4 +1,3 @@
-# $Header$ 
 # basic C types
 int                    T_IV
 unsigned               T_UV
@@ -41,7 +40,8 @@ Boolean                       T_IV
 double                 T_DOUBLE
 SysRet                 T_SYSRET
 SysRetLong             T_SYSRET
-FILE *                 T_IN
+FILE *                 T_STDIO
+PerlIO *               T_INOUT
 FileHandle             T_PTROBJ
 InputStream            T_IN
 InOutStream            T_INOUT
@@ -56,22 +56,22 @@ T_SVREF
        if (sv_isa($arg, \"${ntype}\"))
            $var = (SV*)SvRV($arg);
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_AVREF
        if (sv_isa($arg, \"${ntype}\"))
            $var = (AV*)SvRV($arg);
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_HVREF
        if (sv_isa($arg, \"${ntype}\"))
            $var = (HV*)SvRV($arg);
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_CVREF
        if (sv_isa($arg, \"${ntype}\"))
            $var = (CV*)SvRV($arg);
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_SYSRET
        $var NOT IMPLEMENTED
 T_UV
@@ -107,57 +107,57 @@ T_DOUBLE
 T_PV
        $var = ($type)SvPV($arg,PL_na)
 T_PTR
-       $var = ($type)SvIV($arg)
+       $var = INT2PTR($type,SvIV($arg))
 T_PTRREF
        if (SvROK($arg)) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type) tmp;
+           $var = INT2PTR($type,tmp);
        }
        else
-           croak(\"$var is not a reference\")
+           Perl_croak(aTHX_ \"$var is not a reference\")
 T_REF_IV_REF
        if (sv_isa($arg, \"${type}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
            $var = *($type *) tmp;
        }
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_REF_IV_PTR
        if (sv_isa($arg, \"${type}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
            $var = ($type) tmp;
        }
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_PTROBJ
        if (sv_derived_from($arg, \"${ntype}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type) tmp;
+           $var = INT2PTR($type,tmp);
        }
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_PTRDESC
        if (sv_isa($arg, \"${ntype}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           ${type}_desc = (\U${type}_DESC\E*) tmp; 
+           ${type}_desc = (\U${type}_DESC\E*) tmp;
            $var = ${type}_desc->ptr;
        }
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_REFREF
        if (SvROK($arg)) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = *($type) tmp;
+           $var = *INT2PTR($type,tmp);
        }
        else
-           croak(\"$var is not a reference\")
+           Perl_croak(aTHX_ \"$var is not a reference\")
 T_REFOBJ
        if (sv_isa($arg, \"${ntype}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = *($type) tmp;
+           $var = *INT2PTR($type,tmp);
        }
        else
-           croak(\"$var is not of type ${ntype}\")
+           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
 T_OPAQUE
        $var NOT IMPLEMENTED
 T_OPAQUEPTR
@@ -174,6 +174,8 @@ T_ARRAY
        while (items--) {
            DO_ARRAY_ELEM;
        }
+T_STDIO
+       $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
 T_IN
        $var = IoIFP(sv_2io($arg))
 T_INOUT
@@ -226,13 +228,13 @@ T_U_CHAR
 T_FLOAT
        sv_setnv($arg, (double)$var);
 T_NV
-       sv_setnv($arg, (double)$var);
+       sv_setnv($arg, (NV)$var);
 T_DOUBLE
        sv_setnv($arg, (double)$var);
 T_PV
        sv_setpv((SV*)$arg, $var);
 T_PTR
-       sv_setiv($arg, (IV)$var);
+       sv_setiv($arg, PTR2IV($var));
 T_PTRREF
        sv_setref_pv($arg, Nullch, (void*)$var);
 T_REF_IV_REF
@@ -251,7 +253,7 @@ T_REFOBJ
 T_OPAQUE
        sv_setpvn($arg, (char *)&$var, sizeof($var));
 T_OPAQUEPTR
-       sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var);
+       sv_setpvn($arg, (char *)$var, sizeof(*$var));
 T_PACKED
        XS_pack_$ntype($arg, $var);
 T_PACKEDARRAY
@@ -268,6 +270,15 @@ T_ARRAY
        DO_ARRAY_ELEM
        }
        SP += $var.size - 1;
+T_STDIO
+       {
+           GV *gv = newGVgen("$Package");
+           PerlIO *fp = PerlIO_importFILE($var,0);
+           if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
+               sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+           else
+               $arg = &PL_sv_undef;
+       }
 T_IN
        {
            GV *gv = newGVgen("$Package");