]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - t/80-leaks.t
Delay destruction of reference return values till the current statement end
[perl/modules/Variable-Magic.git] / t / 80-leaks.t
index 6916936327e0ad0c2c3c2e626c791296eefc22ce..9ccc1a38429e3ca787c176eab238491d189781ba 100644 (file)
@@ -9,7 +9,7 @@ use Test::More;
 
 BEGIN {
  my $tests = 11;
- $tests += 3 * (4 + (MGf_LOCAL ? 1 : 0) + (VMG_UVAR ? 4 : 0));
+ $tests += 4 * (4 + (MGf_LOCAL ? 1 : 0) + (VMG_UVAR ? 4 : 0));
  plan tests => $tests;
 }
 
@@ -115,11 +115,13 @@ $type{$_} = 'scalar_global'  for qw<local>;
 $type{$_} = 'array'          for qw<clear>;
 $type{$_} = 'hash'           for qw<fetch store exists delete>;
 
+sub void { }
+
 my %trigger = (
  get    => 'my $y = $x',
  set    => '$x = 2',
  clear  => '@a = ()',
- free   => '',
+ free   => 'void()',
  local  => 'local $X = 2',
  fetch  => 'my $v = $h{a}',
  store  => '$h{a} = 2',
@@ -135,16 +137,18 @@ for my $meth (@methods) {
 
   my $init    = $init{$type{$meth}};
   my $trigger = $trigger{$meth};
+  my $deinit  = '';
 
   if ($meth eq 'free') {
-   $init    = "{\n$init";
-   $trigger = '}';
+   $init   = "{\n$init";
+   $deinit = '}';
   }
 
   my $code = join ";\n", grep length, (
    $init,
    'is $destroyed, 0, "return from $meth, before trigger"',
-   $trigger,
+   $trigger . ', is($destroyed, 0, "return from $meth, after trigger")',
+   $deinit,
    'is $destroyed, 1, "return from $meth, after trigger"',
   );