1 /* This testcase would cause a hang in PTA solving due to a complex copy
2 constraint and marking the wrong variable as changed. */
4 typedef struct RExC_state_t
12 unsigned char str_len
;
16 static void *regatom (RExC_state_t
* pRExC_state
, int *flagp
);
19 regpiece (RExC_state_t
* pRExC_state
, int *flagp
)
21 return regatom (0, 0);
25 regbranch (RExC_state_t
* pRExC_state
, int *flagp
, int first
)
27 return regpiece (0, 0);
31 reg (RExC_state_t
* pRExC_state
, int paren
, int *flagp
)
33 return regbranch (0, 0, 1);
37 Perl_pregcomp (char *exp
, char *xend
, void *pm
)
43 regatom (RExC_state_t
* pRExC_state
, int *flagp
)
45 register void *ret
= 0;
49 switch (*(pRExC_state
->parse
))
52 ret
= reg (pRExC_state
, 1, &flags
);
60 register unsigned long len
;
61 register unsigned ender
;
65 unsigned long foldlen
;
66 unsigned char tmpbuf
[6 + 1], *foldbuf
;
69 s
= (((struct regnode_string
*) ret
)->string
);
70 for (len
= 0, p
= (pRExC_state
->parse
) - 1;
71 len
< 127 && p
< (pRExC_state
->end
); len
++)
73 if (((*p
) == '*' || (*p
) == '+' || (*p
) == '?'
74 || ((*p
) == '{' && regcurly (p
))))
77 for (foldbuf
= tmpbuf
; foldlen
; foldlen
-= numlen
)
79 reguni (pRExC_state
, ender
, s
, &unilen
);
86 reguni (pRExC_state
, ender
, s
, &unilen
);