summaryrefslogtreecommitdiffstats
path: root/lib/Package/Stash.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-10-31 10:41:56 -0500
committerJesse Luehrs <doy@tozt.net>2010-10-31 10:56:09 -0500
commit67b1704808e62f27210fe992df9c45b232fe9d5b (patch)
tree19e2f7a922593fa69f3e81a5a41293e0bb86a091 /lib/Package/Stash.pm
parent23093e2990bf64f03ad844e7b08fffa34ead8510 (diff)
downloadpackage-stash-67b1704808e62f27210fe992df9c45b232fe9d5b.tar.gz
package-stash-67b1704808e62f27210fe992df9c45b232fe9d5b.zip
revert vivication changes for now again0.13
Diffstat (limited to 'lib/Package/Stash.pm')
-rw-r--r--lib/Package/Stash.pm51
1 files changed, 13 insertions, 38 deletions
diff --git a/lib/Package/Stash.pm b/lib/Package/Stash.pm
index 6c361c1..32e5d30 100644
--- a/lib/Package/Stash.pm
+++ b/lib/Package/Stash.pm
@@ -5,10 +5,6 @@ use warnings;
use Carp qw(confess);
use Scalar::Util qw(reftype);
-use Symbol;
-# before 5.12, assigning to the ISA glob would make it lose its magical ->isa
-# powers
-use constant BROKEN_ISA_ASSIGNMENT => ($] < 5.012);
=head1 SYNOPSIS
@@ -234,42 +230,21 @@ sub get_package_symbol {
my $namespace = $self->namespace;
if (!exists $namespace->{$name}) {
- if ($opts{vivify}) {
- if ($type eq 'ARRAY') {
- if (BROKEN_ISA_ASSIGNMENT) {
- $self->add_package_symbol(
- $variable,
- $name eq 'ISA' ? () : ([])
- );
- }
- else {
- $self->add_package_symbol($variable, []);
- }
- }
- elsif ($type eq 'HASH') {
- $self->add_package_symbol($variable, {});
- }
- elsif ($type eq 'SCALAR') {
- $self->add_package_symbol($variable);
- }
- elsif ($type eq 'IO') {
- $self->add_package_symbol($variable, Symbol::geniosym);
- }
- elsif ($type eq 'CODE') {
- confess "Don't know how to vivify CODE variables";
- }
- else {
- confess "Unknown type $type in vivication";
- }
+ # assigning to the result of this function like
+ # @{$stash->get_package_symbol('@ISA')} = @new_ISA
+ # makes the result not visible until the variable is explicitly
+ # accessed... in the case of @ISA, this might never happen
+ # for instance, assigning like that and then calling $obj->isa
+ # will fail. see t/005-isa.t
+ if ($opts{vivify} && $type eq 'ARRAY' && $name ne 'ISA') {
+ $self->add_package_symbol($variable, []);
+ }
+ elsif ($opts{vivify} && $type eq 'HASH') {
+ $self->add_package_symbol($variable, {});
}
else {
- if ($type eq 'CODE') {
- # this effectively "de-vivifies" the code slot. if we don't do
- # this, referencing the coderef at the end of this function
- # will cause perl to auto-vivify a stub coderef in the slot,
- # which isn't what we want
- $self->add_package_symbol($variable);
- }
+ # FIXME
+ $self->add_package_symbol($variable)
}
}