Front page | perl.perl5.porters |
Postings from October 2003
Re: 5.8.2 perldelta
Thread Previous
|
Thread Next
From:
Stas Bekman
Date:
October 29, 2003 16:18
Subject:
Re: 5.8.2 perldelta
Message ID:
3FA058B9.90905@stason.org
Nicholas Clark wrote:
> On Wed, Oct 29, 2003 at 03:06:35PM -0800, Stas Bekman wrote:
>
>>Chip Salzenberg wrote:
>>
>>>According to Nicholas Clark:
>>>
>>>
>>>>C<require> should now behave correctly when repeated attempts are made
>>>>to load a file which fails.
>>
>>Hmm, may be this is the problem. Can you please point me to this patch?
>>Indeed I fail to require the same file twice.
>
>
> Nick
>
> 21415 and 21427 integrated as 21496
>
> Change 21496 by nicholas@entropy on 2003/10/19 18:31:14
Aha! This is the patch that broke mod_perl 1.0's test suite. Thanks Nick!
I'm going to figure out how to provide you an easy to reproduce code running
outside mod_perl.
> Integrate:
> [ 21415]
> Subject: [PATCH bleadperl] (was Re: require() does not behave aas documented)
> From: Rick Delaney <rick@bort.ca>
> Date: Tue, 23 Sep 2003 12:14:52 -0400
> Message-ID: <20030923121452.G18845@biff.bort.ca>
>
> [ 21427]
> Subject: Re: require patch breaks locale
> From: Rick Delaney <rick@bort.ca>
> Date: Wed, 8 Oct 2003 22:41:55 -0400
> Message-Id: <20031008224155.A14638@biff.bort.ca>
>
> Affected files ...
>
> ... //depot/maint-5.8/perl/pp_ctl.c#39 integrate
> ... //depot/maint-5.8/perl/t/comp/require.t#6 integrate
>
> Differences ...
>
> ==== //depot/maint-5.8/perl/pp_ctl.c#39 (text) ====
>
> @@ -1375,6 +1375,9 @@
>
> if (optype == OP_REQUIRE) {
> char* msg = SvPVx(ERRSV, n_a);
> + SV *nsv = cx->blk_eval.old_namesv;
> + (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
> + &PL_sv_undef, 0);
> DIE(aTHX_ "%sCompilation failed in require",
> *msg ? msg : "Unknown error\n");
> }
> @@ -2801,7 +2804,7 @@
> sv_setpv(ERRSV,"");
> if (yyparse() || PL_error_count || !PL_eval_root) {
> SV **newsp; /* Used by POPBLOCK. */
> - PERL_CONTEXT *cx;
> + PERL_CONTEXT *cx = &cxstack[cxstack_ix];
> I32 optype = 0; /* Might be reset by POPEVAL. */
> STRLEN n_a;
>
> @@ -2820,6 +2823,9 @@
> LEAVE;
> if (optype == OP_REQUIRE) {
> char* msg = SvPVx(ERRSV, n_a);
> + SV *nsv = cx->blk_eval.old_namesv;
> + (void)hv_store(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv),
> + &PL_sv_undef, 0);
> DIE(aTHX_ "%sCompilation failed in require",
> *msg ? msg : "Unknown error\n");
> }
> @@ -3017,9 +3023,12 @@
> DIE(aTHX_ "Null filename used");
> TAINT_PROPER("require");
> if (PL_op->op_type == OP_REQUIRE &&
> - (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
> - *svp != &PL_sv_undef)
> - RETPUSHYES;
> + (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
> + if (*svp != &PL_sv_undef)
> + RETPUSHYES;
> + else
> + DIE(aTHX_ "Compilation failed in require");
> + }
>
> /* prepare to compile file */
>
>
> ==== //depot/maint-5.8/perl/t/comp/require.t#6 (xtext) ====
>
> @@ -11,8 +11,8 @@
>
> my $Is_EBCDIC = (ord('A') == 193) ? 1 : 0;
> my $Is_UTF8 = (${^OPEN} || "") =~ /:utf8/;
> -my $total_tests = 30;
> -if ($Is_EBCDIC || $Is_UTF8) { $total_tests = 27; }
> +my $total_tests = 44;
> +if ($Is_EBCDIC || $Is_UTF8) { $total_tests = 41; }
> print "1..$total_tests\n";
>
> sub do_require {
> @@ -108,6 +108,24 @@
> print "# $@\nnot " unless $@ =~ /did not return a true/;
> print "ok ",$i++,"\n";
>
> +print "not " if exists $INC{'bleah.pm'};
> +print "ok ",$i++,"\n";
> +
> +my $flag_file = 'bleah.flg';
> +# run-time error in require
> +for my $expected_compile (1,0) {
> + write_file($flag_file, 1);
> + print "not " unless -e $flag_file;
> + print "ok ",$i++,"\n";
> + write_file('bleah.pm', "unlink '$flag_file' or die; \$a=0; \$b=1/\$a; 1;\n");
> + print "# $@\nnot " if eval { require 'bleah.pm' };
> + print "ok ",$i++,"\n";
> + print "not " unless -e $flag_file xor $expected_compile;
> + print "ok ",$i++,"\n";
> + print "not " unless exists $INC{'bleah.pm'};
> + print "ok ",$i++,"\n";
> +}
> +
> # compile-time failure in require
> do_require "1)\n";
> # bison says 'parse error' instead of 'syntax error',
> @@ -115,6 +133,20 @@
> print "# $@\nnot " unless $@ =~ /(syntax|parse) error/mi;
> print "ok ",$i++,"\n";
>
> +# previous failure cached in %INC
> +print "not " unless exists $INC{'bleah.pm'};
> +print "ok ",$i++,"\n";
> +write_file($flag_file, 1);
> +write_file('bleah.pm', "unlink '$flag_file'; 1");
> +print "# $@\nnot " if eval { require 'bleah.pm' };
> +print "ok ",$i++,"\n";
> +print "# $@\nnot " unless $@ =~ /Compilation failed/i;
> +print "ok ",$i++,"\n";
> +print "not " unless -e $flag_file;
> +print "ok ",$i++,"\n";
> +print "not " unless exists $INC{'bleah.pm'};
> +print "ok ",$i++,"\n";
> +
> # successful require
> do_require "1";
> print "# $@\nnot " if $@;
> @@ -163,7 +195,11 @@
> $i++; do_require(bytes_to_utf16('n', qq(print "ok $i\\n"; 1;\n), 1)); # BE
> $i++; do_require(bytes_to_utf16('v', qq(print "ok $i\\n"; 1;\n), 1)); # LE
>
> -END { 1 while unlink 'bleah.pm'; 1 while unlink 'bleah.do'; }
> +END {
> + 1 while unlink 'bleah.pm';
> + 1 while unlink 'bleah.do';
> + 1 while unlink 'bleah.flg';
> +}
>
> # ***interaction with pod (don't put any thing after here)***
>
--
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
Thread Previous
|
Thread Next