save old PL_curcop value in parser struct
Dave Mitchell [Sat, 12 May 2007 19:51:37 +0000 (19:51 +0000)]
p4raw-id: //depot/perl@31201

parser.h
toke.c

index 02509e4..affe7be 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -96,6 +96,8 @@ typedef struct yy_parser {
     I32                nexttoke;
 #endif
 
+    COP                *saved_curcop;  /* the previous PL_curcop */
+
 } yy_parser;
     
 
diff --git a/toke.c b/toke.c
index b1a9ff6..83e43bf 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -671,11 +671,10 @@ Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, bool new_filter)
 
     /* on scope exit, free this parser and restore any outer one */
     SAVEPARSER(parser);
+    parser->saved_curcop = PL_curcop;
 
     /* initialise lexer state */
 
-    SAVECOPLINE(PL_curcop);
-
 #ifdef PERL_MAD
     parser->curforce = -1;
 #else
@@ -723,6 +722,7 @@ Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, bool new_filter)
 void
 Perl_parser_free(pTHX_  const yy_parser *parser)
 {
+    PL_curcop = parser->saved_curcop;
     SvREFCNT_dec(parser->linestr);
 
     if (parser->rsfp == PerlIO_stdin())