The lib/Cwd.pm diet part of
[p5sagit/p5-mst-13.2.git] / universal.c
index 22be54f..6ba5a13 100644 (file)
@@ -45,6 +45,9 @@ S_isa_lookup(pTHX_ HV *stash, const char *name, HV* name_stash,
     if (strEQ(HvNAME(stash), name))
        return &PL_sv_yes;
 
+    if (strEQ(name, "UNIVERSAL"))
+       return &PL_sv_yes;
+
     if (level > 100)
        Perl_croak(aTHX_ "Recursive inheritance detected in package '%s'",
                   HvNAME(stash));
@@ -112,8 +115,7 @@ S_isa_lookup(pTHX_ HV *stash, const char *name, HV* name_stash,
            (void)hv_store(hv,name,len,&PL_sv_no,0);
        }
     }
-
-    return boolSV(strEQ(name, "UNIVERSAL"));
+    return &PL_sv_no;
 }
 
 /*
@@ -171,6 +173,7 @@ XS(XS_version_numify);
 XS(XS_version_vcmp);
 XS(XS_version_boolean);
 XS(XS_version_noop);
+XS(XS_version_is_alpha);
 XS(XS_utf8_is_utf8);
 XS(XS_utf8_valid);
 XS(XS_utf8_encode);
@@ -210,6 +213,7 @@ Perl_boot_core_UNIVERSAL(pTHX)
        newXS("version::boolean", XS_version_boolean, file);
        newXS("version::(nomethod", XS_version_noop, file);
        newXS("version::noop", XS_version_noop, file);
+       newXS("version::is_alpha", XS_version_is_alpha, file);
     }
     newXS("utf8::is_utf8", XS_utf8_is_utf8, file);
     newXS("utf8::valid", XS_utf8_valid, file);
@@ -528,6 +532,34 @@ XS(XS_version_noop)
      XSRETURN_EMPTY;
 }
 
+XS(XS_version_is_alpha)
+{
+    dXSARGS;
+    if (items != 1)
+       Perl_croak(aTHX_ "Usage: version::is_alpha(lobj)");
+    SP -= items;
+    {
+       SV *lobj;
+
+        if (sv_derived_from(ST(0), "version")) {
+                SV *tmp = SvRV(ST(0));
+               lobj = tmp;
+        }
+        else
+                Perl_croak(aTHX_ "lobj is not of type version");
+{
+    I32 len = av_len((AV *)lobj);
+    I32 digit = SvIVX(*av_fetch((AV *)lobj, len, 0));
+    if ( digit < 0 )
+       XSRETURN_YES;
+    else
+       XSRETURN_NO;
+}
+       PUTBACK;
+       return;
+    }
+}
+
 XS(XS_utf8_is_utf8)
 {
      dXSARGS;
@@ -723,7 +755,7 @@ XS(XS_Internals_hv_clear_placehold)
             && items) {
             SV *val = hv_iterval(hv, entry);
 
-            if (val == &PL_sv_undef) {
+            if (val == &PL_sv_placeholder) {
 
                 /* It seems that I have to go back in the front of the hash
                    API to delete a hash, even though I have a HE structure