Don't delete the previous symbol table entry when shadowing subs.
Florian Ragwitz [Thu, 23 Oct 2008 21:54:03 +0000 (21:54 +0000)]
Instead just overwrite the CODE slot within. That prevents the GV from being
freed, which totally throws off the tokenizer, that holds a pointer to the gv
already.

This makes t/method.t and others work under the debugger, although I have no
idea why it ever worked, even with the debugger disabled.

lib/Devel/Declare.pm

index 227b3ba..a3e76bf 100644 (file)
@@ -97,7 +97,6 @@ sub shadow_sub {
   no strict 'refs';
   my ($pack, $pname) = ($name =~ m/(.+)::([^:]+)/);
   push(@$temp_save, $pack->can($pname));
-  delete ${"${pack}::"}{$pname};
   no warnings 'redefine';
   no warnings 'prototype';
   *{$name} = $cr;