Change 31797 by [EMAIL PROTECTED] on 2007/09/06 08:31:01
Subject: [PATCH blead] Re: [perl #44969] Restricted hashes do not
handle private fields properly
From: Rick Delaney <[EMAIL PROTECTED]>
Date: Wed, 5 Sep 2007 14:38:40 -0400
Message-ID: <[EMAIL PROTECTED]>
Affected files ...
... //depot/perl/lib/base/t/fields-base.t#9 edit
... //depot/perl/lib/fields.pm#27 edit
Differences ...
==== //depot/perl/lib/base/t/fields-base.t#9 (text) ====
Index: perl/lib/base/t/fields-base.t
--- perl/lib/base/t/fields-base.t#8~31542~ 2007-07-06 09:00:57.000000000
-0700
+++ perl/lib/base/t/fields-base.t 2007-09-06 01:31:01.000000000 -0700
@@ -245,11 +245,6 @@
my X $self = shift;
$self = fields::new($self) unless ref $self;
$self->{X1} = "x1";
- # FIXME. This code is dead on blead becase the test is skipped.
- # The test states that it's being skipped becaues restricted hashes
- # don't support a feature. Presumably we need to make that feature
- # supported. Bah.
- # use Devel::Peek; Dump($self);
$self->{_X2} = "_x2";
return $self;
}
@@ -280,13 +275,6 @@
package main;
- if ($Has_PH) {
my Z $c = Z->new();
is($c->get_X2, '_x2', "empty intermediate class");
- }
- else {
- SKIP: {
- skip "restricted hashes don't support private fields properly", 1;
- }
- }
}
==== //depot/perl/lib/fields.pm#27 (text) ====
Index: perl/lib/fields.pm
--- perl/lib/fields.pm#26~31540~ 2007-07-06 06:58:58.000000000 -0700
+++ perl/lib/fields.pm 2007-09-06 01:31:01.000000000 -0700
@@ -11,7 +11,7 @@
}
use vars qw(%attr $VERSION);
-$VERSION = '2.12';
+$VERSION = '2.13';
# constant.pm is slow
sub PUBLIC () { 2**0 }
@@ -124,11 +124,19 @@
my $self = bless {}, $class;
# The lock_keys() prototype won't work since we require Hash::Util :(
- &Hash::Util::lock_keys(\%$self, keys %{$class.'::FIELDS'});
+ &Hash::Util::lock_keys(\%$self, _accessible_keys($class));
return $self;
}
}
+sub _accessible_keys {
+ my ($class) = @_;
+ return (
+ keys %{$class.'::FIELDS'},
+ map(_accessible_keys($_), @{$class.'::ISA'}),
+ );
+}
+
sub phash {
die "Pseudo-hashes have been removed from Perl" if $] >= 5.009;
my $h;
End of Patch.