diff options
author | Karl Williamson <public@khwilliamson.com> | 2011-02-27 14:04:26 -0700 |
---|---|---|
committer | Karl Williamson <public@khwilliamson.com> | 2011-02-27 19:21:32 -0700 |
commit | 2c6aa59398a9d39f981ea691c06f8b98ad60b54f (patch) | |
tree | 3c0da19867ce36f326a1d8813efd202b963332fb | |
parent | 1d791ab2d32bd22ff8566e9d86204da48e96a040 (diff) | |
download | perl-2c6aa59398a9d39f981ea691c06f8b98ad60b54f.tar.gz |
regcomp.c: Add parameters to fcns
A pointer to the list of multi-char folds in an ANYOF node is now passed
to the routines that set the bit map. This is in preparation for those
routines to add to the list
-rw-r--r-- | embed.fnc | 4 | ||||
-rw-r--r-- | embed.h | 4 | ||||
-rw-r--r-- | proto.h | 14 | ||||
-rw-r--r-- | regcomp.c | 46 |
4 files changed, 35 insertions, 33 deletions
@@ -979,8 +979,8 @@ Ap |SV* |regclass_swash |NULLOK const regexp *prog \ |NN const struct regnode *node|bool doinit \ |NULLOK SV **listsvp|NULLOK SV **altsvp #ifdef PERL_IN_REGCOMP_C -EMi |U8 |set_regclass_bit|NN struct RExC_state_t* pRExC_state|NN regnode* node|const U8 value|NN HV** nonbitmap_ptr -EMs |U8 |set_regclass_bit_fold|NN struct RExC_state_t *pRExC_state|NN regnode* node|const U8 value|NN HV** nonbitmap_ptr +EMi |U8 |set_regclass_bit|NN struct RExC_state_t* pRExC_state|NN regnode* node|const U8 value|NN HV** invlist_ptr|NN AV** alternate_ptr +EMs |U8 |set_regclass_bit_fold|NN struct RExC_state_t *pRExC_state|NN regnode* node|const U8 value|NN HV** invlist_ptr|NN AV** alternate_ptr EMs |void |add_alternate |NN AV** alternate_ptr|NN U8* string|STRLEN len #endif Ap |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \ @@ -909,8 +909,8 @@ #define reguni(a,b,c) S_reguni(aTHX_ a,b,c) #define regwhite S_regwhite #define scan_commit(a,b,c,d) S_scan_commit(aTHX_ a,b,c,d) -#define set_regclass_bit(a,b,c,d) S_set_regclass_bit(aTHX_ a,b,c,d) -#define set_regclass_bit_fold(a,b,c,d) S_set_regclass_bit_fold(aTHX_ a,b,c,d) +#define set_regclass_bit(a,b,c,d,e) S_set_regclass_bit(aTHX_ a,b,c,d,e) +#define set_regclass_bit_fold(a,b,c,d,e) S_set_regclass_bit_fold(aTHX_ a,b,c,d,e) #define study_chunk(a,b,c,d,e,f,g,h,i,j,k) S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k) # endif # if defined(PERL_IN_REGEXEC_C) @@ -6210,19 +6210,21 @@ STATIC void S_scan_commit(pTHX_ const struct RExC_state_t *pRExC_state, struct s #define PERL_ARGS_ASSERT_SCAN_COMMIT \ assert(pRExC_state); assert(data); assert(minlenp) -PERL_STATIC_INLINE U8 S_set_regclass_bit(pTHX_ struct RExC_state_t* pRExC_state, regnode* node, const U8 value, HV** nonbitmap_ptr) +PERL_STATIC_INLINE U8 S_set_regclass_bit(pTHX_ struct RExC_state_t* pRExC_state, regnode* node, const U8 value, HV** invlist_ptr, AV** alternate_ptr) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) - __attribute__nonnull__(pTHX_4); + __attribute__nonnull__(pTHX_4) + __attribute__nonnull__(pTHX_5); #define PERL_ARGS_ASSERT_SET_REGCLASS_BIT \ - assert(pRExC_state); assert(node); assert(nonbitmap_ptr) + assert(pRExC_state); assert(node); assert(invlist_ptr); assert(alternate_ptr) -STATIC U8 S_set_regclass_bit_fold(pTHX_ struct RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** nonbitmap_ptr) +STATIC U8 S_set_regclass_bit_fold(pTHX_ struct RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** invlist_ptr, AV** alternate_ptr) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) - __attribute__nonnull__(pTHX_4); + __attribute__nonnull__(pTHX_4) + __attribute__nonnull__(pTHX_5); #define PERL_ARGS_ASSERT_SET_REGCLASS_BIT_FOLD \ - assert(pRExC_state); assert(node); assert(nonbitmap_ptr) + assert(pRExC_state); assert(node); assert(invlist_ptr); assert(alternate_ptr) STATIC I32 S_study_chunk(pTHX_ struct RExC_state_t *pRExC_state, regnode **scanp, I32 *minlenp, I32 *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U8* recursed, struct regnode_charclass_class *and_withp, U32 flags, U32 depth) __attribute__nonnull__(pTHX_1) @@ -9123,14 +9123,14 @@ S_checkposixcc(pTHX_ RExC_state_t *pRExC_state) ANYOF_##NAME: \ for (value = 0; value < 256; value++) \ if (TEST) \ - stored += set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); \ + stored += set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); \ yesno = '+'; \ what = WORD; \ break; \ case ANYOF_N##NAME: \ for (value = 0; value < 256; value++) \ if (!TEST) \ - stored += set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); \ + stored += set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); \ yesno = '!'; \ what = WORD; \ break @@ -9145,14 +9145,14 @@ ANYOF_##NAME: \ else if (UNI_SEMANTICS) { \ for (value = 0; value < 256; value++) { \ if (TEST_8(value)) stored += \ - set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); \ + set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); \ } \ } \ else { \ for (value = 0; value < 128; value++) { \ if (TEST_7(UNI_TO_NATIVE(value))) stored += \ set_regclass_bit(pRExC_state, ret, \ - (U8) UNI_TO_NATIVE(value), &nonbitmap); \ + (U8) UNI_TO_NATIVE(value), &nonbitmap, &unicode_alternate); \ } \ } \ yesno = '+'; \ @@ -9163,18 +9163,18 @@ case ANYOF_N##NAME: \ else if (UNI_SEMANTICS) { \ for (value = 0; value < 256; value++) { \ if (! TEST_8(value)) stored += \ - set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); \ + set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); \ } \ } \ else { \ for (value = 0; value < 128; value++) { \ if (! TEST_7(UNI_TO_NATIVE(value))) stored += set_regclass_bit( \ - pRExC_state, ret, (U8) UNI_TO_NATIVE(value), &nonbitmap); \ + pRExC_state, ret, (U8) UNI_TO_NATIVE(value), &nonbitmap, &unicode_alternate); \ } \ if (AT_LEAST_ASCII_RESTRICTED) { \ for (value = 128; value < 256; value++) { \ stored += set_regclass_bit( \ - pRExC_state, ret, (U8) UNI_TO_NATIVE(value), &nonbitmap); \ + pRExC_state, ret, (U8) UNI_TO_NATIVE(value), &nonbitmap, &unicode_alternate); \ } \ ANYOF_FLAGS(ret) |= ANYOF_UNICODE_ALL; \ } \ @@ -9208,7 +9208,7 @@ case ANYOF_N##NAME: \ #endif STATIC U8 -S_set_regclass_bit_fold(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** nonbitmap_ptr) +S_set_regclass_bit_fold(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** invlist_ptr, AV** alternate_ptr) { /* Handle the setting of folds in the bitmap for non-locale ANYOF nodes. @@ -9245,7 +9245,7 @@ S_set_regclass_bit_fold(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 and they have a fold, they should match if the target is utf8, and not otherwise. We add the character here, and calculate the fold later, with the other nonbitmap folds */ - *nonbitmap_ptr = add_range_to_invlist(*nonbitmap_ptr, value, value); + *invlist_ptr = add_range_to_invlist(*invlist_ptr, value, value); } return stored; @@ -9253,7 +9253,7 @@ S_set_regclass_bit_fold(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 PERL_STATIC_INLINE U8 -S_set_regclass_bit(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** nonbitmap_ptr) +S_set_regclass_bit(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** invlist_ptr, AV** alternate_ptr) { /* This inline function sets a bit in the bitmap if not already set, and if * appropriate, its fold, returning the number of bits that actually @@ -9271,7 +9271,7 @@ S_set_regclass_bit(pTHX_ RExC_state_t *pRExC_state, regnode* node, const U8 valu stored = 1; if (FOLD && ! LOC) { /* Locale folds aren't known until runtime */ - stored += set_regclass_bit_fold(pRExC_state, node, value, nonbitmap_ptr); + stored += set_regclass_bit_fold(pRExC_state, node, value, invlist_ptr, alternate_ptr); } return stored; @@ -9623,10 +9623,10 @@ parseit: w, w, rangebegin); stored += - set_regclass_bit(pRExC_state, ret, '-', &nonbitmap); + set_regclass_bit(pRExC_state, ret, '-', &nonbitmap, &unicode_alternate); if (prevvalue < 256) { stored += - set_regclass_bit(pRExC_state, ret, (U8) prevvalue, &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) prevvalue, &nonbitmap, &unicode_alternate); } else { nonbitmap = add_cp_to_invlist(nonbitmap, prevvalue); @@ -9676,7 +9676,7 @@ parseit: else { for (value = 0; value < 128; value++) stored += - set_regclass_bit(pRExC_state, ret, (U8) ASCII_TO_NATIVE(value), &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) ASCII_TO_NATIVE(value), &nonbitmap, &unicode_alternate); } yesno = '+'; what = NULL; /* Doesn't match outside ascii, so @@ -9688,7 +9688,7 @@ parseit: else { for (value = 128; value < 256; value++) stored += - set_regclass_bit(pRExC_state, ret, (U8) ASCII_TO_NATIVE(value), &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) ASCII_TO_NATIVE(value), &nonbitmap, &unicode_alternate); } ANYOF_FLAGS(ret) |= ANYOF_UNICODE_ALL; yesno = '!'; @@ -9701,7 +9701,7 @@ parseit: /* consecutive digits assumed */ for (value = '0'; value <= '9'; value++) stored += - set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); } yesno = '+'; what = POSIX_CC_UNI_NAME("Digit"); @@ -9713,10 +9713,10 @@ parseit: /* consecutive digits assumed */ for (value = 0; value < '0'; value++) stored += - set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); for (value = '9' + 1; value < 256; value++) stored += - set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) value, &nonbitmap, &unicode_alternate); } yesno = '!'; what = POSIX_CC_UNI_NAME("Digit"); @@ -9765,7 +9765,7 @@ parseit: } if (!SIZE_ONLY) stored += - set_regclass_bit(pRExC_state, ret, '-', &nonbitmap); + set_regclass_bit(pRExC_state, ret, '-', &nonbitmap, &unicode_alternate); } else range = 1; /* yeah, it's a range! */ continue; /* but do it the next time */ @@ -9794,20 +9794,20 @@ parseit: for (i = prevvalue; i <= ceilvalue; i++) if (isLOWER(i) && !ANYOF_BITMAP_TEST(ret,i)) { stored += - set_regclass_bit(pRExC_state, ret, (U8) i, &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) i, &nonbitmap, &unicode_alternate); } } else { for (i = prevvalue; i <= ceilvalue; i++) if (isUPPER(i) && !ANYOF_BITMAP_TEST(ret,i)) { stored += - set_regclass_bit(pRExC_state, ret, (U8) i, &nonbitmap); + set_regclass_bit(pRExC_state, ret, (U8) i, &nonbitmap, &unicode_alternate); } } } else #endif for (i = prevvalue; i <= ceilvalue; i++) { - stored += set_regclass_bit(pRExC_state, ret, (U8) i, &nonbitmap); + stored += set_regclass_bit(pRExC_state, ret, (U8) i, &nonbitmap, &unicode_alternate); } } if (value > 255) { @@ -10077,7 +10077,7 @@ parseit: } if (c < 256 && AT_LEAST_UNI_SEMANTICS) { - stored += set_regclass_bit(pRExC_state, ret, (U8) c, &nonbitmap); + stored += set_regclass_bit(pRExC_state, ret, (U8) c, &nonbitmap, &unicode_alternate); } /* It may be that the code point is already * in this range or already in the bitmap, |