Re: localising hash element by variable
[p5sagit/p5-mst-13.2.git] / perl.c
diff --git a/perl.c b/perl.c
index d4abea8..c62722a 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -874,10 +874,6 @@ perl_destruct(pTHXx)
        PL_parser->rsfp = NULL;
     }
 
-    /* Filters for program text */
-    SvREFCNT_dec(PL_rsfp_filters);
-    PL_rsfp_filters = NULL;
-
     if (PL_minus_F) {
        Safefree(PL_splitstr);
        PL_splitstr = NULL;
@@ -1668,6 +1664,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
     bool minus_f = FALSE;
 #endif
     SV *linestr_sv = newSV_type(SVt_PVIV);
+    bool add_read_e_script = FALSE;
 
     SvGROW(linestr_sv, 80);
     sv_setpvn(linestr_sv,"",0);
@@ -1751,7 +1748,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
            forbid_setid('e', -1);
            if (!PL_e_script) {
                PL_e_script = newSVpvs("");
-               filter_add(read_e_script, NULL);
+               add_read_e_script = TRUE;
            }
            if (*++s)
                sv_catpv(PL_e_script, s);
@@ -2261,15 +2258,17 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
     }
 #endif
 
-    lex_start(linestr_sv, rsfp);
+    lex_start(linestr_sv, rsfp, TRUE);
     PL_subname = newSVpvs("main");
 
+    if (add_read_e_script)
+       filter_add(read_e_script, NULL);
+
     /* now parse the script */
 
     SETERRNO(0,SS_NORMAL);
-    PL_error_count = 0;
 #ifdef MACOS_TRADITIONAL
-    if (gMacPerl_SyntaxError = (yyparse() || PL_error_count)) {
+    if (gMacPerl_SyntaxError = (yyparse() || PL_parser->error_count)) {
        if (PL_minus_c)
            Perl_croak(aTHX_ "%s had compilation errors.\n", MacPerl_MPWFileName(PL_origfilename));
        else {
@@ -2278,7 +2277,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
        }
     }
 #else
-    if (yyparse() || PL_error_count) {
+    if (yyparse() || PL_parser->error_count) {
        if (PL_minus_c)
            Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
        else {
@@ -3509,7 +3508,6 @@ S_init_interp(pTHX)
 #    define PERLVARIC(var,type,init)   PERL_GET_INTERP->var = init;
 #  endif
 #  include "intrpvar.h"
-#  include "thrdvar.h"
 #  undef PERLVAR
 #  undef PERLVARA
 #  undef PERLVARI
@@ -3520,7 +3518,6 @@ S_init_interp(pTHX)
 #  define PERLVARI(var,type,init)      PL_##var = init;
 #  define PERLVARIC(var,type,init)     PL_##var = init;
 #  include "intrpvar.h"
-#  include "thrdvar.h"
 #  undef PERLVAR
 #  undef PERLVARA
 #  undef PERLVARI