This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Allow a fcn param to be NULL
authorKarl Williamson <khw@cpan.org>
Thu, 25 Jan 2018 20:26:16 +0000 (13:26 -0700)
committerKarl Williamson <khw@cpan.org>
Tue, 30 Jan 2018 18:38:12 +0000 (11:38 -0700)
In which case handling is skipped.  This is in preparation for a future
commit which will use this function in a slightly different manner

embed.fnc
proto.h
regcomp.c

index 1f70b42..fa68d95 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -2489,7 +2489,7 @@ Es        |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
                                |NN SV* sv|I32 indent|U32 depth
 Es     |void   |put_code_point |NN SV* sv|UV c
 Es     |bool   |put_charclass_bitmap_innards|NN SV* sv             \
-                               |NN char* bitmap                    \
+                               |NULLOK char* bitmap                \
                                |NULLOK SV* nonbitmap_invlist       \
                                |NULLOK SV* only_utf8_locale_invlist\
                                |NULLOK const regnode * const node  \
diff --git a/proto.h b/proto.h
index 5d8fc15..a72c0fb 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -4188,7 +4188,7 @@ STATIC const regnode*     S_dumpuntil(pTHX_ const regexp *r, const regnode *start, c
        assert(r); assert(start); assert(node); assert(sv)
 STATIC bool    S_put_charclass_bitmap_innards(pTHX_ SV* sv, char* bitmap, SV* nonbitmap_invlist, SV* only_utf8_locale_invlist, const regnode * const node, const bool force_as_is_display);
 #define PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS  \
-       assert(sv); assert(bitmap)
+       assert(sv)
 STATIC SV*     S_put_charclass_bitmap_innards_common(pTHX_ SV* invlist, SV* posixes, SV* only_utf8, SV* not_utf8, SV* only_utf8_locale, const bool invert);
 #define PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS_COMMON   \
        assert(invlist)
index 198f291..b2d7b18 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -20595,7 +20595,7 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
 {
     /* Appends to 'sv' a displayable version of the innards of the bracketed
      * character class defined by the other arguments:
-     *  'bitmap' points to the bitmap.
+     *  'bitmap' points to the bitmap, or NULL if to ignore that.
      *  'nonbitmap_invlist' is an inversion list of the code points that are in
      *      the bitmap range, but for some reason aren't in the bitmap; NULL if
      *      none.  The reasons for this could be that they require some
@@ -20706,6 +20706,7 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
     }
 
     /* Accumulate the bit map into the unconditional match list */
+    if (bitmap) {
     for (i = 0; i < NUM_ANYOF_CODE_POINTS; i++) {
         if (BITMAP_TEST(bitmap, i)) {
             int start = i++;
@@ -20715,6 +20716,7 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
             invlist = _add_range_to_invlist(invlist, start, i-1);
         }
     }
+    }
 
     /* Make sure that the conditional match lists don't have anything in them
      * that match unconditionally; otherwise the output is quite confusing.