From: Jesse Luehrs <doy@tozt.net>
Date: Tue, 11 May 2010 07:12:44 +0000 (-0500)
Subject: handle IO slots
X-Git-Tag: 0.01~11
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b1a00d0e626e61c80bdcd71b550d3e24eefc9e0b;p=gitmo%2FPackage-Stash-XS.git

handle IO slots
---

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