summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-05-11 02:12:44 -0500
committerJesse Luehrs <doy@tozt.net>2010-05-11 02:12:44 -0500
commitb1a00d0e626e61c80bdcd71b550d3e24eefc9e0b (patch)
tree82014af6016457ac5c276aabd3b9029dd82cc7df /lib
parent3b9f59fdaf5084b92e08106c8a544b722404a45e (diff)
downloadpackage-stash-xs-b1a00d0e626e61c80bdcd71b550d3e24eefc9e0b.tar.gz
package-stash-xs-b1a00d0e626e61c80bdcd71b550d3e24eefc9e0b.zip
handle IO slots
Diffstat (limited to 'lib')
-rw-r--r--lib/Stash/Manip.pm16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/Stash/Manip.pm b/lib/Stash/Manip.pm
index be37e87..3b9bcff 100644
--- a/lib/Stash/Manip.pm
+++ b/lib/Stash/Manip.pm
@@ -222,33 +222,44 @@ sub remove_package_symbol {
# no doubt this is grossly inefficient and
# could be done much easier and faster in XS
- my ($scalar_desc, $array_desc, $hash_desc, $code_desc) = (
+ my ($scalar_desc, $array_desc, $hash_desc, $code_desc, $io_desc) = (
{ sigil => '$', type => 'SCALAR', name => $name },
{ sigil => '@', type => 'ARRAY', name => $name },
{ sigil => '%', type => 'HASH', name => $name },
{ sigil => '&', type => 'CODE', name => $name },
+ { sigil => '', type => 'IO', name => $name },
);
- my ($scalar, $array, $hash, $code);
+ my ($scalar, $array, $hash, $code, $io);
if ($type eq 'SCALAR') {
$array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
$hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
$code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
+ $io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'ARRAY') {
$scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
$hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
$code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
+ $io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'HASH') {
$scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
$array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
$code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
+ $io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'CODE') {
$scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
$array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
$hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
+ $io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
+ }
+ elsif ($type eq 'IO') {
+ $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
+ $array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
+ $hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
+ $code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
}
else {
confess "This should never ever ever happen";
@@ -260,6 +271,7 @@ sub remove_package_symbol {
$self->add_package_symbol($array_desc => $array) if defined $array;
$self->add_package_symbol($hash_desc => $hash) if defined $hash;
$self->add_package_symbol($code_desc => $code) if defined $code;
+ $self->add_package_symbol($io_desc => $io) if defined $io;
}
=head2 list_all_package_symbols $type_filter