This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Decommission Encode::Tcl HZ testing for now.
[perl5.git] / xsutils.c
index 81bb2fc..f044b6e 100644 (file)
--- a/xsutils.c
+++ b/xsutils.c
@@ -1,3 +1,18 @@
+/*    xsutils.c
+ *
+ *    Copyright (c) 1999-2002, Larry Wall
+ *
+ *    You may distribute under the terms of either the GNU General Public
+ *    License or the Artistic License, as specified in the README file.
+ *
+ */
+
+/*
+ * "Perilous to us all are the devices of an art deeper than we possess
+ * ourselves." --Gandalf
+ */
+
+
 #include "EXTERN.h"
 #define PERL_IN_XSUTILS_C
 #include "perl.h"
@@ -84,8 +99,8 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs)
                        continue;
                    }
                    break;
-               case 's':
-      if (strEQ(name, "unique")) {
+               case 'u':
+                   if (strEQ(name, "unique")) {
                        if (negated)
                            GvUNIQUE_off(CvGV((CV*)sv));
                        else
@@ -99,11 +114,17 @@ modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs)
            break;
        default:
            switch ((int)len) {
-              case 6:
+           case 6:
                switch (*name) {
-                  case 's':
-      if (strEQ(name, "unique")) {
-                        /* toke.c has already marked as GVf_UNIQUE */
+               case 'u':
+                   if (strEQ(name, "unique")) {
+                       if (SvTYPE(sv) == SVt_PVGV) {
+                           if (negated)
+                               GvUNIQUE_off(sv);
+                           else
+                               GvUNIQUE_on(sv);
+                       }
+                       /* Hope this came from toke.c if not a GV. */
                         continue;
                     }
                 }
@@ -190,7 +211,11 @@ usage:
        if (cvflags & CVf_METHOD)
            XPUSHs(sv_2mortal(newSVpvn("method", 6)));
         if (GvUNIQUE(CvGV((CV*)sv)))
-     XPUSHs(sv_2mortal(newSVpvn("unique", 6)));
+           XPUSHs(sv_2mortal(newSVpvn("unique", 6)));
+       break;
+    case SVt_PVGV:
+       if (GvUNIQUE(sv))
+           XPUSHs(sv_2mortal(newSVpvn("unique", 6)));
        break;
     default:
        break;