I infer that change 25891 as-is would break OS2. This should fix it.
[p5sagit/p5-mst-13.2.git] / ext / attrs / attrs.xs
index a92922d..e3ba012 100644 (file)
@@ -4,14 +4,12 @@
 #include "XSUB.h"
 
 static cv_flags_t
-get_flag(char *attr)
+get_flag(const char *attr)
 {
     if (strnEQ(attr, "method", 6))
        return CVf_METHOD;
     else if (strnEQ(attr, "locked", 6))
        return CVf_LOCKED;
-    else if (strnEQ(attr, "lvalue", 6))
-       return CVf_LVALUE;
     else
        return 0;
 }
@@ -19,20 +17,23 @@ get_flag(char *attr)
 MODULE = attrs         PACKAGE = attrs
 
 void
-import(Class, ...)
-char * Class
+import(...)
     ALIAS:
        unimport = 1
     PREINIT:
        int i;
-       CV *cv;
     PPCODE:
+       if (items < 1)
+           Perl_croak(aTHX_ "Usage: %s(Class, ...)", GvNAME(CvGV(cv)));
        if (!PL_compcv || !(cv = CvOUTSIDE(PL_compcv)))
            croak("can't set attributes outside a subroutine scope");
+       if (ckWARN(WARN_DEPRECATED))
+           Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
+                       "pragma \"attrs\" is deprecated, "
+                       "use \"sub NAME : ATTRS\" instead");
        for (i = 1; i < items; i++) {
-           STRLEN n_a;
-           char *attr = SvPV(ST(i), n_a);
-           cv_flags_t flag = get_flag(attr);
+           const char * const attr = SvPV_nolen(ST(i));
+           const cv_flags_t flag = get_flag(attr);
            if (!flag)
                croak("invalid attribute name %s", attr);
            if (ix)
@@ -51,8 +52,7 @@ SV *  sub
                sub = Nullsv;
        }
        else {
-           STRLEN n_a;
-           char *name = SvPV(sub, n_a);
+           const char * const name = SvPV_nolen(sub);
            sub = (SV*)perl_get_cv(name, FALSE);
        }
        if (!sub)