Add a test that "eval" does not create additional reference to ouside variables.
authorGerard Goossen <gerard@ggoossen.net>
Wed, 9 Dec 2009 16:23:00 +0000 (17:23 +0100)
committerRafael Garcia-Suarez <rgs@consttype.org>
Wed, 16 Dec 2009 09:18:01 +0000 (10:18 +0100)
t/op/eval.t

index 58a6334..305d7f3 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     require './test.pl';
 }
 
-print "1..103\n";
+print "1..105\n";
 
 eval 'print "ok 1\n";';
 
@@ -560,6 +560,15 @@ $test++;
 
 curr_test($test);
 
+{
+    # test that the CV compiled for the eval is freed by checking that no additional 
+    # reference to outside lexicals are made.
+    my $x;
+    is(Internals::SvREFCNT($x), 1, "originally only 1 referece");
+    eval '$x';
+    is(Internals::SvREFCNT($x), 1, "execution eval doesn't create new references");
+}
+
 fresh_perl_is(<<'EOP', "ok\n", undef, 'RT #70862');
 $::{'@'}='';
 eval {};