-
Notifications
You must be signed in to change notification settings - Fork 560
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PATCH] Regression in 5.12: labelled string eval #10301
Comments
From @cpansprouthttp://www.nntp.perl.org/group/perl.perl5.porters/2010/04/msg158760.html This was broken by change 33656 (http://perl5.git.perl.org/perl.git/commitdiff/dca6062a863d0 Here’s another example of the same bug, which shows that that it has perl5.12.0 -le 'F1:++$x and eval q"print qq/x is $x/; exit if ++$y == In short, I tried making S_dofindlabel skip any op that == PL_eval_start, but In other words, the goto inside the eval cannot tell the difference It seems to have something to do with %^H not being synchronised with The attached patch is perhaps not the best fix, but works around the Use of uninitialized value $category in concatenation (.) or string Flags: Site configuration information for perl 5.12.0: Configured by sprout at Tue Apr 6 15:41:56 PDT 2010. Summary of my perl5 (revision 5 version 12 subversion 0 patch v5.12.0- Locally applied patches: @INC for perl 5.12.0: Environment for perl 5.12.0: |
From @cpansproutInline Patchdiff -Nurp blead/pp_ctl.c blead-labelled-eval/pp_ctl.c
--- blead/pp_ctl.c 2010-04-10 14:03:15.000000000 -0700
+++ blead-labelled-eval/pp_ctl.c 2010-04-11 14:27:16.000000000 -0700
@@ -3763,6 +3763,8 @@ PP(pp_entereval)
HINTS_REFCNT_LOCK;
PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
HINTS_REFCNT_UNLOCK;
+ PL_compiling.cop_hints_hash
+ = Perl_store_cop_label(aTHX_ PL_compiling.cop_hints_hash, "");
}
/* special case: an eval '' executed within the DB package gets lexically
* placed in the first non-DB CV rather than the current CV - this
diff -Nurp blead/t/op/eval.t blead-labelled-eval/t/op/eval.t
--- blead/t/op/eval.t 2010-04-02 12:23:09.000000000 -0700
+++ blead-labelled-eval/t/op/eval.t 2010-04-11 14:30:00.000000000 -0700
@@ -6,7 +6,7 @@ BEGIN {
require './test.pl';
}
-print "1..106\n";
+print "1..107\n";
eval 'print "ok 1\n";';
@@ -602,3 +602,18 @@ eval q{ eval { + } };
print "ok\n";
EOP
+fresh_perl_is(<<'EOP', <<'expected', undef, 'labelled string eval');
+#!perl -l
+F1:++$x and eval q"print qq/x is $x/; exit if ++$y == 10; goto q/F1/;"
+EOP
+x is 1
+x is 2
+x is 3
+x is 4
+x is 5
+x is 6
+x is 7
+x is 8
+x is 9
+x is 10
+expected |
From @nwc10On Sun, Apr 11, 2010 at 05:03:41PM -0700, Father Chrysostomos wrote:
As is, that's going to leak, as the reference to the (then current) The simplest solution would be to remove the preceding 3 lines. A more efficient solution (avoiding any allocation) would be to walk back Nicholas Clark |
The RT System itself - Status changed from 'new' to 'open' |
From @nwc10On Tue, Apr 13, 2010 at 11:31:51AM +0100, Nicholas Clark wrote:
I'm wrong. Your patch as is is correct. Thanks for correctly identifying a solution, and for the simpler test code.
However, I preferred this approach, and implemented it as 4755081. Nicholas Clark |
@nwc10 - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#74290 (status was 'resolved')
Searchable as RT74290$
The text was updated successfully, but these errors were encountered: