Assignments to function pointers can't be NULL, as that's a pointer to
[p5sagit/p5-mst-13.2.git] / gv.c
diff --git a/gv.c b/gv.c
index c7ab061..9c33b42 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -1,7 +1,7 @@
 /*    gv.c
  *
  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- *    2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
+ *    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
@@ -161,7 +161,8 @@ GP *
 Perl_newGP(pTHX_ GV *const gv)
 {
     GP *gp;
-    const char *const file = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
+    const char *const file
+       = (PL_curcop && CopFILE(PL_curcop)) ? CopFILE(PL_curcop) : "";
     STRLEN len = strlen(file);
     U32 hash;
 
@@ -173,7 +174,7 @@ Perl_newGP(pTHX_ GV *const gv)
     gp->gv_sv = newSV(0);
 #endif
 
-    gp->gp_line = CopLINE(PL_curcop);
+    gp->gp_line = PL_curcop ? CopLINE(PL_curcop) : 0;
     /* XXX Ideally this cast would be replaced with a change to const char*
        in the struct.  */
     gp->gp_file_hek = share_hek(file, len, hash);
@@ -696,10 +697,10 @@ S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const char *methp
        stash = gv_stashsv(namesv, FALSE);
        if (!stash)
            Perl_croak( aTHX_ "panic: Can't use %%%s because %"SVf" is not available", 
-               varpv, module);
+               varpv, SVfARG(module));
        else if (!gv_fetchmethod(stash, methpv))    
            Perl_croak( aTHX_ "panic: Can't use %%%s because %"SVf" does not support method %s", 
-               varpv, module, methpv);
+               varpv, SVfARG(module), methpv);
     }
     return stash;
 }
@@ -805,8 +806,7 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
     HV *stash = NULL;
     const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
     const I32 no_expand = flags & GV_NOEXPAND;
-    const I32 add =
-       flags & ~SVf_UTF8 & ~GV_NOADD_NOINIT & ~GV_NOEXPAND & ~GV_NOTQUAL;
+    const I32 add = flags & ~GV_NOADD_MASK;
     const char *const name_end = nambeg + full_len;
     const char *const name_em1 = name_end - 1;
 
@@ -1109,10 +1109,16 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
                if (strEQ(name2, "NCODING"))
                    goto magicalize;
                break;
+            case '\015':        /* $^MATCH */
+                if (strEQ(name2, "ATCH"))
+                   goto ro_magicalize;
            case '\017':        /* $^OPEN */
                if (strEQ(name2, "PEN"))
                    goto magicalize;
                break;
+           case '\020':        /* $^PREMATCH  $^POSTMATCH */
+               if (strEQ(name2, "REMATCH") || strEQ(name2, "OSTMATCH"))
+                   goto ro_magicalize;  
            case '\024':        /* ${^TAINT} */
                if (strEQ(name2, "AINT"))
                    goto ro_magicalize;