This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert part of 21497 (integration of 21418:
authorNicholas Clark <nick@ccl4.org>
Thu, 30 Oct 2003 19:24:06 +0000 (19:24 +0000)
committerNicholas Clark <nick@ccl4.org>
Thu, 30 Oct 2003 19:24:06 +0000 (19:24 +0000)
Subject: [PATCH] Fixing UNIVERSAL.pm's bit of unpleasantness)
and 21496 (caching of require failures in %INC)
Reconsider these for 5.8.3

p4raw-id: //depot/maint-5.8/perl@21579

lib/UNIVERSAL.pm
pp_ctl.c
t/comp/require.t
t/op/universal.t

index c5f22eb..7b7bfc4 100644 (file)
@@ -9,15 +9,9 @@ our $VERSION = '1.01';
 # Exporter.  It's bad enough that all classes have a import() method
 # whenever UNIVERSAL.pm is loaded.
 require Exporter;
+*import = \&Exporter::import;
 @EXPORT_OK = qw(isa can VERSION);
 
-# Make sure that even though the import method is called, it doesn't do
-# anything unless its called on UNIVERSAL
-sub import {
-    return unless $_[0] eq __PACKAGE__;
-    goto &Exporter::import;
-}
-
 1;
 __END__
 
index 72f9276..7621e65 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1375,9 +1375,6 @@ Perl_die_where(pTHX_ char *message, STRLEN msglen)
 
            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");
            }
@@ -2804,7 +2801,7 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
        sv_setpv(ERRSV,"");
     if (yyparse() || PL_error_count || !PL_eval_root) {
        SV **newsp;                     /* Used by POPBLOCK. */
-       PERL_CONTEXT *cx = &cxstack[cxstack_ix];
+       PERL_CONTEXT *cx;
        I32 optype = 0;                 /* Might be reset by POPEVAL. */
        STRLEN n_a;
        
@@ -2823,9 +2820,6 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
        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");
        }
@@ -3023,12 +3017,9 @@ PP(pp_require)
        DIE(aTHX_ "Null filename used");
     TAINT_PROPER("require");
     if (PL_op->op_type == OP_REQUIRE &&
-       (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0))) {
-       if (*svp != &PL_sv_undef)
-           RETPUSHYES;
-       else
-           DIE(aTHX_ "Compilation failed in require");
-    }
+      (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
+      *svp != &PL_sv_undef)
+       RETPUSHYES;
 
     /* prepare to compile file */
 
index 6931146..c82d535 100755 (executable)
@@ -11,8 +11,8 @@ $i = 1;
 
 my $Is_EBCDIC = (ord('A') == 193) ? 1 : 0;
 my $Is_UTF8   = (${^OPEN} || "") =~ /:utf8/;
-my $total_tests = 44;
-if ($Is_EBCDIC || $Is_UTF8) { $total_tests = 41; }
+my $total_tests = 30;
+if ($Is_EBCDIC || $Is_UTF8) { $total_tests = 27; }
 print "1..$total_tests\n";
 
 sub do_require {
@@ -108,24 +108,6 @@ do_require "0;\n";
 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',
@@ -133,20 +115,6 @@ do_require "1)\n";
 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 $@;
@@ -195,11 +163,7 @@ sub bytes_to_utf16 {
 $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';
-    1 while unlink 'bleah.flg';
-}
+END { 1 while unlink 'bleah.pm'; 1 while unlink 'bleah.do'; }
 
 # ***interaction with pod (don't put any thing after here)***
 
index ebc22d1..71daf67 100755 (executable)
@@ -9,7 +9,7 @@ BEGIN {
     $| = 1;
 }
 
-print "1..101\n";
+print "1..100\n";
 
 $a = {};
 bless $a, "Bob";
@@ -195,9 +195,3 @@ test ! UNIVERSAL::isa("\xff\xff\xff\0", 'HASH');
 my $x = {}; bless $x, 'X';
 test $x->isa('UNIVERSAL');
 test $x->isa('UNIVERSAL');
-
-
-# Check that the "historical accident" of UNIVERSAL having an import()
-# method doesn't effect anyone else.
-eval { Some::Package->import("bar") };
-test !$@;