From: David Mitchell Date: Sun, 26 Jul 2009 01:19:20 +0000 (+0100) Subject: dup saved_curcop in PL_parser X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=f0c5aa00eeb992584d6996af147c4c51fe7a6540;p=p5sagit%2Fp5-mst-13.2.git dup saved_curcop in PL_parser Commit 7c4baf47da introduced the saved_curcop field of PL_parser, but omitted to copy the entry during interpreter cloning. This may fix bugs [RT #58468], [RT #59498] --- diff --git a/sv.c b/sv.c index b26bbef..8bfe441 100644 --- a/sv.c +++ b/sv.c @@ -10426,6 +10426,10 @@ Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param) Copy(proto->nexttype, parser->nexttype, 5, I32); parser->nexttoke = proto->nexttoke; #endif + + /* XXX should clone saved_curcop here, but we aren't passed + * proto_perl; so do it in perl_clone_using instead */ + return parser; } @@ -12084,6 +12088,13 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, PL_parser = parser_dup(proto_perl->Iparser, param); + /* XXX this only works if the saved cop has already been cloned */ + if (proto_perl->Iparser) { + PL_parser->saved_curcop = (COP*)any_dup( + proto_perl->Iparser->saved_curcop, + proto_perl); + } + PL_subline = proto_perl->Isubline; PL_subname = sv_dup_inc(proto_perl->Isubname, param);