Re: [perl #34493] h2ph `extern inline' problems
[p5sagit/p5-mst-13.2.git] / universal.c
index 78d30cb..760c33b 100644 (file)
@@ -1,7 +1,7 @@
 /*    universal.c
  *
  *    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- *    by Larry Wall and others
+ *    2005, by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
  * beginning." --Gandalf, relating Gollum's story
  */
 
+/* This file contains the code that implements the functions in Perl's
+ * UNIVERSAL package, such as UNIVERSAL->can().
+ */
+
 #include "EXTERN.h"
 #define PERL_IN_UNIVERSAL_C
 #include "perl.h"
@@ -374,10 +378,10 @@ XS(XS_UNIVERSAL_VERSION)
                    vnumify(req),vnormal(req),vnumify(sv),vnormal(sv));
     }
 
-    if (sv == (SV*)&PL_sv_undef) {
-       ST(0) = sv;
-    } else {
+    if ( SvOK(sv) && sv_derived_from(sv, "version") ) {
        ST(0) = vnumify(sv);
+    } else {
+       ST(0) = sv;
     }
 
     XSRETURN(1);
@@ -598,7 +602,7 @@ XS(XS_version_qv)
            }
            else
            {
-               version = savepv(SvPV_nolen(ver));
+               version = savesvpv(ver);
            }
            (void)scan_version(version,vs,TRUE);
            Safefree(version);
@@ -855,7 +859,7 @@ XS(XS_PerlIO_get_layers)
             if (SvROK(sv) && isGV(SvRV(sv)))
                  gv = (GV*)SvRV(sv);
             else
-                 gv = gv_fetchpv(SvPVX(sv), FALSE, SVt_PVIO);
+                 gv = gv_fetchsv(sv, FALSE, SVt_PVIO);
        }
 
        if (gv && (io = GvIO(gv))) {
@@ -951,3 +955,13 @@ XS(XS_Internals_HvREHASH)  /* Subject to change  */
     }
     Perl_croak(aTHX_ "Internals::HvREHASH $hashref");
 }
+
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vim: shiftwidth=4:
+*/