This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #129000) create a safer utf8_hop()
[perl5.git] / embed.fnc
index 3e0e844..9d40940 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
 :
 :         (currently no effect)
 :
 :
 :         (currently no effect)
 :
+:   W  Add a _pDEPTH argument to function prototypes, and an _aDEPTH
+:      argument to the function calls. This means that under DEBUGGING
+:      a depth argument is added to the functions, which is used for
+:      example by the regex engine for debugging and trace output.
+:      A non DEBUGGING build will not pass the unused argument.
+:      Currently restricted to functions with at least one argument.
+:
 :   X  Explicitly exported:
 :
 :         add entry to the list of exported symbols, unless x or m
 :   X  Explicitly exported:
 :
 :         add entry to the list of exported symbols, unless x or m
@@ -1676,9 +1683,10 @@ ApdD     |UV     |to_utf8_case   |NN const U8 *p                                 \
 #if defined(PERL_IN_UTF8_C)
 inRP   |bool   |does_utf8_overflow|NN const U8 * const s|NN const U8 * e
 inRP   |bool   |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s|const STRLEN len
 #if defined(PERL_IN_UTF8_C)
 inRP   |bool   |does_utf8_overflow|NN const U8 * const s|NN const U8 * e
 inRP   |bool   |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s|const STRLEN len
+inRP   |bool   |isFF_OVERLONG  |NN const U8 * const s|const STRLEN len
 sMR    |char * |unexpected_non_continuation_text                       \
                |NN const U8 * const s                                  \
 sMR    |char * |unexpected_non_continuation_text                       \
                |NN const U8 * const s                                  \
-               |const STRLEN print_len                                 \
+               |STRLEN print_len                                       \
                |const STRLEN non_cont_byte_pos                         \
                |const STRLEN expect_len
 sM     |char * |_byte_dump_string|NN const U8 * s|const STRLEN len
                |const STRLEN non_cont_byte_pos                         \
                |const STRLEN expect_len
 sM     |char * |_byte_dump_string|NN const U8 * s|const STRLEN len
@@ -1726,6 +1734,9 @@ Ap        |U8*    |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
 AdpPR  |STRLEN |utf8_length    |NN const U8* s|NN const U8 *e
 AipdPR |IV     |utf8_distance  |NN const U8 *a|NN const U8 *b
 AipdPRn        |U8*    |utf8_hop       |NN const U8 *s|SSize_t off
 AdpPR  |STRLEN |utf8_length    |NN const U8* s|NN const U8 *e
 AipdPR |IV     |utf8_distance  |NN const U8 *a|NN const U8 *b
 AipdPRn        |U8*    |utf8_hop       |NN const U8 *s|SSize_t off
+AipdPRn        |U8*    |utf8_hop_back|NN const U8 *s|SSize_t off|NN const U8 *start
+AipdPRn        |U8*    |utf8_hop_forward|NN const U8 *s|SSize_t off|NN const U8 *end
+AipdPRn        |U8*    |utf8_hop_safe  |NN const U8 *s|SSize_t off|NN const U8 *start|NN const U8 *end
 ApMd   |U8*    |utf8_to_bytes  |NN U8 *s|NN STRLEN *len
 Apd    |int    |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \
                                |STRLEN ulen
 ApMd   |U8*    |utf8_to_bytes  |NN U8 *s|NN STRLEN *len
 Apd    |int    |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \
                                |STRLEN ulen
@@ -2257,6 +2268,12 @@ Es       |regnode*|handle_regex_sets|NN RExC_state_t *pRExC_state \
                                |NULLOK SV ** return_invlist            \
                                |NN I32 *flagp|U32 depth                \
                                |NN char * const oregcomp_parse
                                |NULLOK SV ** return_invlist            \
                                |NN I32 *flagp|U32 depth                \
                                |NN char * const oregcomp_parse
+#if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
+Es     |void   |dump_regex_sets_structures                                 \
+                               |NN RExC_state_t *pRExC_state               \
+                               |NN AV * stack                              \
+                               |const IV fence|NN AV * fence_stack
+#endif
 Es     |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
 Es     |regnode*|reg_node      |NN RExC_state_t *pRExC_state|U8 op
 Es     |regnode*|regpiece      |NN RExC_state_t *pRExC_state \
 Es     |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
 Es     |regnode*|reg_node      |NN RExC_state_t *pRExC_state|U8 op
 Es     |regnode*|regpiece      |NN RExC_state_t *pRExC_state \
@@ -2396,21 +2413,20 @@ Es      |U8     |regtail_study  |NN RExC_state_t *pRExC_state \
 ERs    |bool   |isFOO_lc       |const U8 classnum|const U8 character
 ERs    |bool   |isFOO_utf8_lc  |const U8 classnum|NN const U8* character
 ERs    |SSize_t|regmatch       |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
 ERs    |bool   |isFOO_lc       |const U8 classnum|const U8 character
 ERs    |bool   |isFOO_utf8_lc  |const U8 classnum|NN const U8* character
 ERs    |SSize_t|regmatch       |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
-ERs    |I32    |regrepeat      |NN regexp *prog|NN char **startposp \
+WERs   |I32    |regrepeat      |NN regexp *prog|NN char **startposp \
                                |NN const regnode *p \
                                |NN regmatch_info *const reginfo \
                                |NN const regnode *p \
                                |NN regmatch_info *const reginfo \
-                               |I32 max \
-                               |int depth
+                               |I32 max
 ERs    |bool   |regtry         |NN regmatch_info *reginfo|NN char **startposp
 ERs    |bool   |reginclass     |NULLOK regexp * const prog  \
                                |NN const regnode * const n  \
                                |NN const U8 * const p       \
                                |NN const U8 * const p_end   \
                                |bool const utf8_target
 ERs    |bool   |regtry         |NN regmatch_info *reginfo|NN char **startposp
 ERs    |bool   |reginclass     |NULLOK regexp * const prog  \
                                |NN const regnode * const n  \
                                |NN const U8 * const p       \
                                |NN const U8 * const p_end   \
                                |bool const utf8_target
-Es     |CHECKPOINT|regcppush   |NN const regexp *rex|I32 parenfloor\
+WEs    |CHECKPOINT|regcppush   |NN const regexp *rex|I32 parenfloor\
                                |U32 maxopenparen
                                |U32 maxopenparen
-Es     |void   |regcppop       |NN regexp *rex\
-                               |NN U32 *maxopenparen_p
+WEs    |void   |regcppop       |NN regexp *rex|NN U32 *maxopenparen_p
+WEs    |void   |regcp_restore  |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
 ERsn   |U8*    |reghop3        |NN U8 *s|SSize_t off|NN const U8 *lim
 ERsn   |U8*    |reghop4        |NN U8 *s|SSize_t off|NN const U8 *llim \
                                |NN const U8 *rlim
 ERsn   |U8*    |reghop3        |NN U8 *s|SSize_t off|NN const U8 *lim
 ERsn   |U8*    |reghop4        |NN U8 *s|SSize_t off|NN const U8 *llim \
                                |NN const U8 *rlim
@@ -2594,7 +2610,7 @@ s |void   |force_ident_maybe_lex|char pit
 s      |void   |incline        |NN const char *s
 s      |int    |intuit_method  |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
 s      |int    |intuit_more    |NN char *s
 s      |void   |incline        |NN const char *s
 s      |int    |intuit_method  |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
 s      |int    |intuit_more    |NN char *s
-s      |I32    |lop            |I32 f|int x|NN char *s
+s      |I32    |lop            |I32 f|U8 x|NN char *s
 rs     |void   |missingterm    |NULLOK char *s
 s      |void   |no_op          |NN const char *const what|NULLOK char *s
 s      |int    |pending_ident
 rs     |void   |missingterm    |NULLOK char *s
 s      |void   |no_op          |NN const char *const what|NULLOK char *s
 s      |int    |pending_ident