summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAnno Siegel <anno4000@lublin.zrz.tu-berlin.de>2007-04-21 04:11:00 +0200
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2007-04-21 08:55:16 +0000
commitd020b00bb8acda6af3dd46a1ca1af4bb77f958a6 (patch)
treea6c01b2c9eec0db491521662c17184f7655434f6 /ext
parent33e12d9d267d9578365b1a5116be5449323ba82f (diff)
downloadperl-d020b00bb8acda6af3dd46a1ca1af4bb77f958a6.tar.gz
Bug in Hash::Util::FieldHash
Message-Id: <DFEC2420-9301-40EC-A986-80D0290B2C8F@mailbox.tu-berlin.de> p4raw-id: //depot/perl@31001
Diffstat (limited to 'ext')
-rw-r--r--ext/Hash/Util/FieldHash/Changes5
-rw-r--r--ext/Hash/Util/FieldHash/FieldHash.xs5
-rw-r--r--ext/Hash/Util/FieldHash/lib/Hash/Util/FieldHash.pm2
-rw-r--r--ext/Hash/Util/FieldHash/t/02_function.t17
4 files changed, 28 insertions, 1 deletions
diff --git a/ext/Hash/Util/FieldHash/Changes b/ext/Hash/Util/FieldHash/Changes
index 841bce84d6..5ffc28fa47 100644
--- a/ext/Hash/Util/FieldHash/Changes
+++ b/ext/Hash/Util/FieldHash/Changes
@@ -5,3 +5,8 @@ Revision history for Perl extension Hash::Util::FieldHash.
-A -g --skip-ppport -nHash::Util::FieldHash
Fri Jun 23 22:31:59 CEST 2006
- accepted as v5.9.4 DEVEL28420
+
+
+0.02 Fri Apr 20 22:22:57 CEST 2007
+ - Bugfix: string keys are now checked whether they represent
+ an object, so %fieldhash_clone = %fieldhash_orig works.
diff --git a/ext/Hash/Util/FieldHash/FieldHash.xs b/ext/Hash/Util/FieldHash/FieldHash.xs
index 6bc07cc37b..a749fc763c 100644
--- a/ext/Hash/Util/FieldHash/FieldHash.xs
+++ b/ext/Hash/Util/FieldHash/FieldHash.xs
@@ -193,6 +193,11 @@ I32 HUF_watch_key(pTHX_ IV action, SV* field) {
SV* keysv;
if (mg) {
keysv = mg->mg_obj;
+ if (keysv && !SvROK(keysv)) { /* is string an object-id? */
+ SV* obj = HUF_ask_trigger(keysv);
+ if (obj)
+ keysv = obj; /* use the object instead, so registry happens */
+ }
if (keysv && SvROK(keysv)) {
SV* ob_id = HUF_obj_id(keysv);
mg->mg_obj = ob_id; /* key replacement */
diff --git a/ext/Hash/Util/FieldHash/lib/Hash/Util/FieldHash.pm b/ext/Hash/Util/FieldHash/lib/Hash/Util/FieldHash.pm
index 824873aad1..be1ab9a2be 100644
--- a/ext/Hash/Util/FieldHash/lib/Hash/Util/FieldHash.pm
+++ b/ext/Hash/Util/FieldHash/lib/Hash/Util/FieldHash.pm
@@ -15,7 +15,7 @@ our %EXPORT_TAGS = (
);
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
-our $VERSION = '0.01_01';
+our $VERSION = '0.02';
{
require XSLoader;
diff --git a/ext/Hash/Util/FieldHash/t/02_function.t b/ext/Hash/Util/FieldHash/t/02_function.t
index 7796ff8944..745ff3f8c1 100644
--- a/ext/Hash/Util/FieldHash/t/02_function.t
+++ b/ext/Hash/Util/FieldHash/t/02_function.t
@@ -190,6 +190,23 @@ BEGIN { $n_tests += 6 }
is( keys %$ob_reg, @obs, "all obs unregistered");
}
+
+# direct hash assignment
+BEGIN { $n_tests += 4 }
+{
+ fieldhashes \ my( %f, %g, %h);
+ my $size = 6;
+ my @obs = map [], 1 .. $size;
+ @f{ @obs} = ( 1) x $size;
+ $g{ $_} = $f{ $_} for keys %f; # single assignment
+ %h = %f; # wholesale assignment
+ @obs = ();
+ is keys %$ob_reg, 0, "all keys collected";
+ is keys %f, 0, "orig garbage-collected";
+ is keys %g, 0, "single-copy garbage-dollected";
+ is keys %h, 0, "wholesale-copy garbage-dollected";
+}
+
{
BEGIN { $n_tests += 1 }