regcomp.c: Use PL_sv_undef instead of NULL in an AV
authorKarl Williamson <public@khwilliamson.com>
Fri, 2 Aug 2013 18:33:07 +0000 (12:33 -0600)
committerKarl Williamson <public@khwilliamson.com>
Tue, 24 Sep 2013 17:36:12 +0000 (11:36 -0600)
The NULL gets turned into an SVt_NULL anyway.  This array is read only
by S_core_regclass_swash() in regexec.c.  That uses an SvROK, so it
doesn't have to change.

This commit also beefs up the comments around this operation

regcomp.c

index 6dee75a..b6bdaf0 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -14034,16 +14034,22 @@ parseit:
        ARG_SET(ret, ANYOF_NONBITMAP_EMPTY);
     }
     else {
-       /* av[0] stores the character class description in its textual form:
-        *       used later (regexec.c:Perl_regclass_swash()) to initialize the
-        *       appropriate swash, and is also useful for dumping the regnode.
-        * av[1] if NULL, is a placeholder to later contain the swash computed
-        *       from av[0].  But if no further computation need be done, the
-        *       swash is stored there now.
+        /* av[0] stores the character class description in its textual form.
+         *       This is used later (regexec.c:Perl_regclass_swash()) to
+         *       initialize the appropriate swash, and is also useful for
+         *       dumping the regnode.  This is set to &PL_sv_undef if the
+         *       textual description is not needed at run-time (as happens if
+         *       the other elements completely define the class)
+         * av[1] if &PL_sv_undef, is a placeholder to later contain the swash
+         *       computed from av[0].  But if no further computation need be
+         *       done, the swash is stored there now (and av[0] is
+         *       &PL_sv_undef).
         * av[2] stores the cp_list inversion list for use in addition or
-        *       instead of av[0]; used only if av[1] is NULL
+         *       instead of av[0]; used only if cp_list exists and av[1] is
+         *       &PL_sv_undef.  (Otherwise everything needed is already in
+         *       av[0] and av[1])
         * av[3] is set if any component of the class is from a user-defined
-        *       property; used only if av[1] is NULL */
+        *       property; used only if av[2] exists */
        AV * const av = newAV();
        SV *rv;
 
@@ -14054,7 +14060,7 @@ parseit:
            SvREFCNT_dec_NN(cp_list);
        }
        else {
-           av_store(av, 1, NULL);
+           av_store(av, 1, &PL_sv_undef);
            if (cp_list) {
                av_store(av, 2, cp_list);
                av_store(av, 3, newSVuv(has_user_defined_property));