r3735 - in /packages/libset-object-perl/trunk: Changes.pod META.yml Object.xs README debian/changelog lib/Set/Object.pm

eloy at users.alioth.debian.org eloy at users.alioth.debian.org
Thu Sep 14 12:48:54 UTC 2006


Author: eloy
Date: Thu Sep 14 12:48:53 2006
New Revision: 3735

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=3735
Log:
new upstream version

Modified:
    packages/libset-object-perl/trunk/Changes.pod
    packages/libset-object-perl/trunk/META.yml
    packages/libset-object-perl/trunk/Object.xs
    packages/libset-object-perl/trunk/README
    packages/libset-object-perl/trunk/debian/changelog
    packages/libset-object-perl/trunk/lib/Set/Object.pm

Modified: packages/libset-object-perl/trunk/Changes.pod
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libset-object-perl/trunk/Changes.pod?rev=3735&op=diff
==============================================================================
--- packages/libset-object-perl/trunk/Changes.pod (original)
+++ packages/libset-object-perl/trunk/Changes.pod Thu Sep 14 12:48:53 2006
@@ -1,5 +1,22 @@
 
 =head1 REVISION HISTORY FOR Set::Object
+
+=head1 1.18, 14 Sep 2006
+
+=over
+
+=item *
+
+We could only build on gcc due to the use of variadic macros.
+use C<#ifdef> to hide this GCC-specific extension (used only for
+debugging) from non-GCC compilers.
+
+=item *
+
+Add note to man page on compatibility of C<Storable> serializations of
+C<Set::Object>s between revisions.
+
+=back
 
 =head1 1.17, 1 Aug 2006
 

Modified: packages/libset-object-perl/trunk/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libset-object-perl/trunk/META.yml?rev=3735&op=diff
==============================================================================
--- packages/libset-object-perl/trunk/META.yml (original)
+++ packages/libset-object-perl/trunk/META.yml Thu Sep 14 12:48:53 2006
@@ -1,7 +1,7 @@
 # http://module-build.sourceforge.net/META-spec.html
 #XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
 name:         Set-Object
-version:      1.17
+version:      1.18
 version_from: lib/Set/Object.pm
 installdirs:  site
 requires:

Modified: packages/libset-object-perl/trunk/Object.xs
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libset-object-perl/trunk/Object.xs?rev=3735&op=diff
==============================================================================
--- packages/libset-object-perl/trunk/Object.xs (original)
+++ packages/libset-object-perl/trunk/Object.xs Thu Sep 14 12:48:53 2006
@@ -11,23 +11,21 @@
 
 #include "ppport.h"
 
+#if __GNUC__ >= 3   /* I guess. */
+#define _warn(msg, e...) warn("# (" __FILE__ ":%d): " msg, __LINE__, ##e)
+#else
+#define _warn warn
+#endif
+
 // for debugging object-related functions
-#if 0
-#define DEBUG(msg, e...) warn("# (" __FILE__ ":%d): " msg, __LINE__, ##e)
-#else
-#define DEBUG(msg, e...)
-#endif
+#define IF_DEBUG(e)
 
 // for debugging scalar-related functions
 #define IF_REMOVE_DEBUG(e)
 #define IF_INSERT_DEBUG(e)
 
 // for debugging weakref-related functions
-#if 0
-#define SPELL_DEBUG(msg, e...) DEBUG(msg, ##e)
-#else
-#define SPELL_DEBUG(msg, e...)
-#endif
+#define IF_SPELL_DEBUG(e)
 
 #define SET_OBJECT_MAGIC_backref (char)0x9f
 
@@ -59,7 +57,7 @@
 		New(0, pb->sv, 1, SV*);
 		pb->sv[0] = sv;
 		pb->n = 1;
-		DEBUG("inserting 0x%.8x in bucket 0x%.8x offset %d", sv, pb, 0);
+		IF_DEBUG(_warn("inserting 0x%.8x in bucket 0x%.8x offset %d", sv, pb, 0));
 	}
 	else
 	{
@@ -85,7 +83,7 @@
 
 		*hole = sv;
 
-		DEBUG("inserting 0x%.8x in bucket 0x%.8x offset %d", sv, pb, iter - pb->sv);
+		IF_DEBUG(_warn("inserting 0x%.8x in bucket 0x%.8x offset %d", sv, pb, iter - pb->sv));
 	}
 	
 	return 1;
@@ -97,28 +95,28 @@
   char* key = 0;
 
   if (!s->flat) {
-    IF_INSERT_DEBUG(warn("iset_insert_scalar(%x): creating scalar hash", s));
+    IF_INSERT_DEBUG(_warn("iset_insert_scalar(%x): creating scalar hash", s));
     s->flat = newHV();
   }
 
   //SvGETMAGIC(sv);
   key = SvPV(sv, len);
 
-  IF_INSERT_DEBUG(warn("iset_insert_scalar(%x): sv (%x, rc = %d, str= '%s')!", s, sv, SvREFCNT(sv), SvPV_nolen(sv)));
+  IF_INSERT_DEBUG(_warn("iset_insert_scalar(%x): sv (%x, rc = %d, str= '%s')!", s, sv, SvREFCNT(sv), SvPV_nolen(sv)));
 
   if (!hv_exists(s->flat, key, len)) {
 
     if (!hv_store(s->flat, key, len, &PL_sv_undef, 0)) {
-      warn("hv store failed[?] set=%x", s);
-    }
-
-    IF_INSERT_DEBUG(warn("iset_insert_scalar(%x): inserted OK!", s));
+      _warn("hv store failed[?] set=%x", s);
+    }
+
+    IF_INSERT_DEBUG(_warn("iset_insert_scalar(%x): inserted OK!", s));
 
     return 1;
   }
   else {
     
-    IF_INSERT_DEBUG(warn("iset_insert_scalar(%x): already there!", s));
+    IF_INSERT_DEBUG(_warn("iset_insert_scalar(%x): already there!", s));
     return 0;
   }
 
@@ -130,24 +128,24 @@
   char* key = 0;
 
   if (!s->flat) {
-    IF_REMOVE_DEBUG(warn("iset_remove_scalar(%x): shortcut for %x(str = '%s') (no hash)", s, sv, SvPV_nolen(sv)));
+    IF_REMOVE_DEBUG(_warn("iset_remove_scalar(%x): shortcut for %x(str = '%s') (no hash)", s, sv, SvPV_nolen(sv)));
     return 0;
   }
 
   //DEBUG("Checking for existance of %s", SvPV_nolen(sv));
   //SvGETMAGIC(sv);
-  IF_REMOVE_DEBUG(warn("iset_remove_scalar(%x): sv (%x, rc = %d, str= '%s')!", s, sv, SvREFCNT(sv), SvPV_nolen(sv)));
+  IF_REMOVE_DEBUG(_warn("iset_remove_scalar(%x): sv (%x, rc = %d, str= '%s')!", s, sv, SvREFCNT(sv), SvPV_nolen(sv)));
 
   key = SvPV(sv, len);
 
   if ( hv_delete(s->flat, key, len, 0) ) {
 
-    IF_REMOVE_DEBUG(warn("iset_remove_scalar(%x): deleted key", s));
+    IF_REMOVE_DEBUG(_warn("iset_remove_scalar(%x): deleted key", s));
     return 1;
 
   } else {
 
-    IF_REMOVE_DEBUG(warn("iset_remove_scalar(%x): key not absent", s));
+    IF_REMOVE_DEBUG(_warn("iset_remove_scalar(%x): key not absent", s));
     return 0;
   }
   
@@ -194,11 +192,11 @@
 		++s->elems;
 		++ins;
 		if (s->is_weak) {
-		    DEBUG("rc of 0x%.8x left as-is, casting magic", el);
+		    IF_DEBUG(_warn("rc of 0x%.8x left as-is, casting magic", el));
 		    _cast_magic(s, el);
 		} else {
 		    SvREFCNT_inc(el);
-		    DEBUG("rc of 0x%.8x bumped to %d", el, SvREFCNT(el));
+		    IF_DEBUG(_warn("rc of 0x%.8x bumped to %d", el, SvREFCNT(el)));
 		}
 	}
 
@@ -210,7 +208,7 @@
 		BUCKET *bucket_first, *bucket_iter, *bucket_last, *new_bucket;
 		int i;
 
-		DEBUG("Reindexing, n = %d", s->elems);
+		IF_DEBUG(_warn("Reindexing, n = %d", s->elems));
 
 		Renew(s->bucket, newn, BUCKET);
 		Zero(s->bucket + oldn, oldn, BUCKET);
@@ -245,8 +243,8 @@
 				}
 
 				new_bucket = bucket_first + index;
-				DEBUG("0x%.8x moved from bucket %d:0x%.8x to %d:0x%.8x",
-					sv, i, bucket_iter, index, new_bucket);
+				IF_DEBUG(_warn("0x%.8x moved from bucket %d:0x%.8x to %d:0x%.8x",
+					       sv, i, bucket_iter, index, new_bucket));
 				insert_in_bucket(new_bucket, sv);
 			}
          
@@ -291,16 +289,16 @@
 		{
 			if (*el_iter)
 			{
-				DEBUG("freeing 0x%.8x, rc = %d, bucket = 0x%.8x(%d) pos = %d",
+				IF_DEBUG(_warn("freeing 0x%.8x, rc = %d, bucket = 0x%.8x(%d)) pos = %d",
 					 *el_iter, SvREFCNT(*el_iter),
 					 bucket_iter, bucket_iter - s->bucket,
-					 el_iter - bucket_iter->sv);
+					 el_iter - bucket_iter->sv));
 
 				if (s->is_weak) {
-				  SPELL_DEBUG("dispelling magic");
+				  IF_SPELL_DEBUG(_warn("dispelling magic"));
 				  _dispel_magic(s,*el_iter);
 				} else {
-				  SPELL_DEBUG("removing element");
+				  IF_SPELL_DEBUG(_warn("removing element"));
 				  SvREFCNT_dec(*el_iter);
 				}
 				*el_iter = 0;
@@ -329,8 +327,8 @@
 _dispel_magic(ISET* s, SV* sv) {
     SV* self_svrv = s->is_weak;
     MAGIC* mg = _detect_magic(sv);
-    SPELL_DEBUG("dispelling magic from 0x%.8x (self = 0x%.8x, mg = 0x%.8x)",
-		sv, self_svrv, mg);
+    IF_SPELL_DEBUG(_warn("dispelling magic from 0x%.8x (self = 0x%.8x, mg = 0x%.8x)",
+			 sv, self_svrv, mg));
     if (mg) {
        AV* wand = mg->mg_obj;
        SV ** const svp = AvARRAY(wand);
@@ -396,14 +394,14 @@
 	      if (strong) {
 		_dispel_magic(s, *el_iter);
 		SvREFCNT_inc(*el_iter);
-		DEBUG("bumped RC of 0x%.8x to %d", *el_iter,
-		      SvREFCNT(*el_iter));
+		IF_DEBUG(_warn("bumped RC of 0x%.8x to %d", *el_iter,
+			       SvREFCNT(*el_iter)));
 	      }
 	      else {
 		_cast_magic(s, *el_iter);
 		SvREFCNT_dec(*el_iter);
-		DEBUG("reduced RC of 0x%.8x to %d", *el_iter,
-		      SvREFCNT(*el_iter));
+		IF_DEBUG(_warn("reduced RC of 0x%.8x to %d", *el_iter,
+			       SvREFCNT(*el_iter)));
 	      }
 	    }
       }
@@ -416,21 +414,21 @@
     SV ** const svp = AvARRAY(av);
     I32 i = AvFILLp(av);
 
-    SPELL_DEBUG("_spell_effect (SV=0x%.8x, av_len=%d)", sv,
-		av_len(av));
+    IF_SPELL_DEBUG(_warn("_spell_effect (SV=0x%.8x, av_len=%d)", sv,
+			 av_len(av)));
 
     while (i >= 0) {
-        SPELL_DEBUG("_spell_effect %d", i);
+        IF_SPELL_DEBUG(_warn("_spell_effect %d", i));
 	if (svp[i] && SvIV(svp[i])) {
 	  ISET* s = INT2PTR(ISET*, SvIV(svp[i]));
-	  SPELL_DEBUG("_spell_effect i = %d, SV = 0x%.8x", i, svp[i]);
+	  IF_SPELL_DEBUG(_warn("_spell_effect i = %d, SV = 0x%.8x", i, svp[i]));
 	  if (!s->is_weak)
 	    Perl_croak(aTHX_ "panic: set_object_magic_killbackrefs (flags=%"UVxf")",
 		       (UV)SvFLAGS(svp[i]));
 	  /* SvREFCNT_dec(svp[i]); */
 	  svp[i] = newSViv(0);
 	  if (iset_remove_one(s, sv, 1) != 1) {
-	    warn("Set::Object magic backref hook called on non-existent item (0x%x, self = 0x%x)", sv, s->is_weak);
+	    _warn("Set::Object magic backref hook called on non-existent item (0x%x, self = 0x%x)", sv, s->is_weak);
 	  };
 	}
 	i--;
@@ -453,12 +451,12 @@
 
     mg = _detect_magic(sv);
     if (mg) {
-      SPELL_DEBUG("sv_magicext reusing wand 0x%.8x for 0x%.8x", wand, sv);
+      IF_SPELL_DEBUG(_warn("sv_magicext reusing wand 0x%.8x for 0x%.8x", wand, sv));
       wand = mg->mg_obj;
     }
     else {
       wand=newAV();
-      SPELL_DEBUG("sv_magicext(0x%.8x, 0x%.8x, %ld, 0x%.8x, NULL, 0)", sv, wand, how, vtable);
+      IF_SPELL_DEBUG(_warn("sv_magicext(0x%.8x, 0x%.8x, %ld, 0x%.8x, NULL, 0)", sv, wand, how, vtable));
       sv_magicext(sv, wand, how, vtable, NULL, 0);
       SvRMAGICAL_on(sv);
     }
@@ -479,10 +477,10 @@
     }
 
     if (free == -1) {
-      SPELL_DEBUG("casting self 0x%.8x with av_push", self_svrv, free);
+      IF_SPELL_DEBUG(_warn("casting self 0x%.8x with av_push", self_svrv, free));
       av_push(wand, self_svrv);
     } else {
-      SPELL_DEBUG("casting self 0x%.8x to slot %d", self_svrv, free);
+      IF_SPELL_DEBUG(_warn("casting self 0x%.8x to slot %d", self_svrv, free));
       svp[free] = self_svrv;
     }
     /*
@@ -498,12 +496,12 @@
       SV **el_iter, **el_last, **el_out_iter;
       BUCKET* bucket;
 
-  DEBUG("removing scalar 0x%.8x from set 0x%.8x", el, s);
+  IF_DEBUG(_warn("removing scalar 0x%.8x from set 0x%.8x", el, s));
 	 
   if (SvOK(el) && !SvROK(el)) {
-    DEBUG("scalar is not a ref (flags = 0x%.8x)", SvFLAGS(el));
+    IF_DEBUG(_warn("scalar is not a ref (flags = 0x%.8x)", SvFLAGS(el)));
     if (s->flat) {
-      DEBUG("calling remove_scalar for 0x%.8x", el);
+      IF_DEBUG(_warn("calling remove_scalar for 0x%.8x", el));
       if (iset_remove_scalar(s, el))
 	return 1;
     }
@@ -524,7 +522,7 @@
   el_iter = bucket->sv;
   el_out_iter = el_iter;
   el_last = el_iter + bucket->n;
-  DEBUG("remove: el_last = 0x%.8x, el_iter = 0x%.8x", el_last, el_iter);
+  IF_DEBUG(_warn("remove: el_last = 0x%.8x, el_iter = 0x%.8x", el_last, el_iter));
 
   for (; el_iter != el_last; ++el_iter)
     {
@@ -532,14 +530,14 @@
 	{
 	  if (s->is_weak) {
 	    if (!spell_in_progress) {
-	      SPELL_DEBUG("Removing ST(0x%.8x) magic", referant);
+	      IF_SPELL_DEBUG(_warn("Removing ST(0x%.8x) magic", referant));
 	      _dispel_magic(s,referant);
 	    } else {
-	      SPELL_DEBUG("Not removing ST(0x%.8x) magic (spell in progress)", referant);
+	      IF_SPELL_DEBUG(_warn("Not removing ST(0x%.8x) magic (spell in progress)", referant));
 
 	    }
 	  } else {
-	    SPELL_DEBUG("Not removing ST(0x%.8x) magic from Muggle", referant);
+	    IF_SPELL_DEBUG(_warn("Not removing ST(0x%.8x) magic from Muggle", referant));
 	    SvREFCNT_dec(referant);
 	  }
 	  *el_iter = 0;
@@ -548,7 +546,7 @@
 	}
       else
 	{
-	  SPELL_DEBUG("ST(0x%.8x) != 0x%.8x", referant, *el_iter);
+	  IF_SPELL_DEBUG(_warn("ST(0x%.8x) != 0x%.8x", referant, *el_iter));
 	}
     }
   return 0;
@@ -571,14 +569,14 @@
 	   SV* isv;
 	
 	   New(0, s, 1, ISET);
-	   //warn("created set id = %x", s);
+	   //_warn("created set id = %x", s);
 	   s->elems = 0;
 	   s->bucket = 0;
 	   s->buckets = 0;
 	   s->flat = 0;
 	   s->is_weak = 0;
 
-	   // warning: cast from pointer to integer of different size
+	   // _warning: cast from pointer to integer of different size
 	   isv = newSViv( PTR2IV(s) );
 	   sv_2mortal(isv);
 
@@ -592,7 +590,7 @@
 		   ISET_INSERT(s, ST(item));
 	   }
 
-      DEBUG("set!");
+      IF_DEBUG(_warn("set!"));
 
       PUSHs(self);
       XSRETURN(1);
@@ -610,11 +608,11 @@
       for (item = 1; item < items; ++item)
       {
 	if ((SV*)s == ST(item)) {
-	  warn("INSERTING SET UP OWN ARSE");
+	  _warn("INSERTING SET UP OWN ARSE");
 	}
 	if ISET_INSERT(s, ST(item))
 			inserted++;
-		  DEBUG("inserting 0x%.8x 0x%.8x size = %d", ST(item), SvRV(ST(item)), s->elems);
+		  IF_DEBUG(_warn("inserting 0x%.8x 0x%.8x size = %d", ST(item), SvRV(ST(item)), s->elems));
       }
 
 
@@ -653,7 +651,7 @@
 
    if (s->flat) {
      if (HvKEYS(s->flat)) {
-       //warn("got some keys: %d\n", HvKEYS(s->flat));
+       //_warn("got some keys: %d\n", HvKEYS(s->flat));
        XSRETURN_UNDEF;
      }
    }
@@ -715,7 +713,7 @@
          SV* rv;
 
 	 if (!SvROK(el)) {
-	   DEBUG("includes! el = %s", SvPV_nolen(el));
+	   IF_DEBUG(_warn("includes! el = %s", SvPV_nolen(el)));
 	   if (!iset_includes_scalar(s, el))
 	     XSRETURN_NO;
 	   goto next;
@@ -730,8 +728,8 @@
          index = hash & (s->buckets - 1);
          bucket = s->bucket + index;
 
-	 DEBUG("includes: looking for 0x%.8x in bucket %d:0x%.8x",
-	       rv, index, bucket);
+	 IF_DEBUG(_warn("includes: looking for 0x%.8x in bucket %d:0x%.8x",
+			rv, index, bucket));
 
          if (!bucket->sv)
             XSRETURN_NO;
@@ -795,7 +793,7 @@
 	  PUSHs(HeSVKEY_force(he));
         }
       }
-//warn("that's all, folks");
+//_warn("that's all, folks");
 
 void
 clear(self)
@@ -807,7 +805,7 @@
       iset_clear(s);
       if (s->flat) {
 	hv_clear(s->flat);
-	IF_REMOVE_DEBUG(warn("iset_clear(%x): cleared", s));
+	IF_REMOVE_DEBUG(_warn("iset_clear(%x): cleared", s));
       }
       
 void
@@ -816,7 +814,7 @@
 
    CODE:
       ISET* s = INT2PTR(ISET*, SvIV(SvRV(self)));
-      DEBUG("aargh!");
+      IF_DEBUG(_warn("aargh!"));
       iset_clear(s);
       if (s->flat) {
 	hv_undef(s->flat);
@@ -844,7 +842,7 @@
       if (s->is_weak)
         XSRETURN_UNDEF;
 
-	DEBUG("weakening set (0x%.8x)", SvRV(self));
+	IF_DEBUG(_warn("weakening set (0x%.8x)", SvRV(self)));
 
       s->is_weak = SvRV(self);
 
@@ -860,7 +858,7 @@
       if (!s->is_weak)
         XSRETURN_UNDEF;
 
-	DEBUG("strengthening set (0x%.8x)", SvRV(self));
+	IF_DEBUG(_warn("strengthening set (0x%.8x)", SvRV(self)));
 
       _fiddle_strength(s, 1);
 
@@ -916,15 +914,15 @@
   MAGIC* mg;
   SV* magic;
   if (! SvROK(sv)) {
-     warn("tried to get magic from non-reference");
+     _warn("tried to get magic from non-reference");
      XSRETURN_UNDEF;
   }
 
   if (! (mg = _detect_magic(SvRV(sv))) )
      XSRETURN_UNDEF;
 
-  SPELL_DEBUG("found magic on 0x%.8x - 0x%.8x", sv, mg);
-  SPELL_DEBUG("mg_obj = 0x%.8x", mg->mg_obj);
+  IF_SPELL_DEBUG(_warn("found magic on 0x%.8x - 0x%.8x", sv, mg));
+  IF_SPELL_DEBUG(_warn("mg_obj = 0x%.8x", mg->mg_obj));
 
      /*magic = newSV(0);
   SvRV(magic) = mg->mg_obj;
@@ -1127,7 +1125,7 @@
 		  ISET_INSERT(s, ST(item));
 	   }
 
-      DEBUG("set!");
+      IF_DEBUG(_warn("set!"));
 
       PUSHs(obj);
       XSRETURN(1);

Modified: packages/libset-object-perl/trunk/README
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libset-object-perl/trunk/README?rev=3735&op=diff
==============================================================================
--- packages/libset-object-perl/trunk/README (original)
+++ packages/libset-object-perl/trunk/README Thu Sep 14 12:48:53 2006
@@ -1,13 +1,13 @@
-README for Set::Object 1.17
+README for Set::Object 1.18
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-There used to be a reproduction of the man page here, but that's just
-silly.
+Set::Object provides for sets of Perl objects - scalars and references.
 
-So now I guess I should put the normal things here, like how to
-install the module, etc.
+INSTALLATION
 
-Oh, look, just go and read another module's README.  It's just the
-same, honest.  Nothing to see here, move along.
+To install this module type the following:
 
-Cheers,
-Sam.
+   perl Makefile.PL
+   make
+   make test
+   su root -c "make install"
+

Modified: packages/libset-object-perl/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libset-object-perl/trunk/debian/changelog?rev=3735&op=diff
==============================================================================
--- packages/libset-object-perl/trunk/debian/changelog (original)
+++ packages/libset-object-perl/trunk/debian/changelog Thu Sep 14 12:48:53 2006
@@ -1,3 +1,9 @@
+libset-object-perl (1.18-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu, 14 Sep 2006 14:45:47 +0200
+
 libset-object-perl (1.17-1) unstable; urgency=low
 
   * New upstream release

Modified: packages/libset-object-perl/trunk/lib/Set/Object.pm
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libset-object-perl/trunk/lib/Set/Object.pm?rev=3735&op=diff
==============================================================================
--- packages/libset-object-perl/trunk/lib/Set/Object.pm (original)
+++ packages/libset-object-perl/trunk/lib/Set/Object.pm Thu Sep 14 12:48:53 2006
@@ -308,6 +308,26 @@
 test suite and send it to me, otherwise it could get pulled.
 
 =back
+
+=head1 SERIALIZATION
+
+It is possible to serialize C<Set::Object> objects via L<Storable> and
+duplicate via C<dclone>; such support was added in release 1.04.  As
+of C<Set::Object> version 1.15, it is possible to freeze scalar items,
+too.
+
+However, the support for freezing scalar items introduced a backwards
+incompatibility.  Earlier versions than 1.15 will C<thaw> sets frozen
+using Set::Object 1.15 and later as a set with one item - an array
+that contains the actual members.
+
+Additionally, version 1.15 had a bug that meant that it would not
+detect C<freeze> protocol upgrades, instead reverting to pre-1.15
+behaviour.
+
+C<Set::Object> 1.16 and above are capable of dealing correctly with
+all serialized forms, as well as correctly aborting if a "newer"
+C<freeze> protocol is detected during C<thaw>.
 
 =head1 PERFORMANCE
 
@@ -395,7 +415,7 @@
 
 @EXPORT_OK = qw( ish_int is_int is_string is_double blessed reftype
 		 refaddr is_overloaded is_object is_key set );
-$VERSION = '1.17';
+$VERSION = '1.18';
 
 bootstrap Set::Object $VERSION;
 




More information about the Pkg-perl-cvs-commits mailing list