From: Jeff Pinyan Date: Sat, 8 Sep 2001 15:42:30 +0000 (-0400) Subject: [PATCH regcomp.c] zero-width assertions CAN be ?'d X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=727f22e3bfa8ab582ce8ac7dc421247d52c9d694;p=p5sagit%2Fp5-mst-13.2.git [PATCH regcomp.c] zero-width assertions CAN be ?'d Date: Sat, 8 Sep 2001 15:42:30 -0400 (EDT) Message-ID: Subject: Re: [PATCH t/op/misc.t] regcomp.c patch broke test From: "Jeff 'japhy/Marillion' Pinyan" Date: Sat, 8 Sep 2001 18:33:12 -0400 (EDT) Message-ID: Subject: [PATCH t/lib/warnings/regcomp] (?=...)? gives no warning now From: "Jeff 'japhy/Marillion' Pinyan" Date: Sat, 8 Sep 2001 18:37:22 -0400 (EDT) Message-ID: p4raw-id: //depot/perl@11956 --- diff --git a/regcomp.c b/regcomp.c index c170a47..4b07fd2 100644 --- a/regcomp.c +++ b/regcomp.c @@ -967,6 +967,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap, reg regnode *oscan = scan; struct regnode_charclass_class this_class; struct regnode_charclass_class *oclass = NULL; + I32 next_is_eval = 0; switch (PL_regkind[(U8)OP(scan)]) { case WHILEM: /* End of (?:...)* . */ @@ -1012,6 +1013,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap, reg scan->flags = ((lp <= U8_MAX) ? lp : U8_MAX); } scan = NEXTOPER(scan) + EXTRA_STEP_2ARGS; + next_is_eval = (OP(scan) == EVAL); do_curly: if (flags & SCF_DO_SUBSTR) { if (mincount == 0) scan_commit(pRExC_state,data); /* Cannot extend fixed substrings */ @@ -1073,6 +1075,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap, reg if (!scan) /* It was not CURLYX, but CURLY. */ scan = next; if (ckWARN(WARN_REGEXP) + /* ? quantifier ok, except for (?{ ... }) */ + && (next_is_eval || !(mincount == 0 && maxcount == 1)) && (minnext == 0) && (deltanext == 0) && data && !(data->flags & (SF_HAS_PAR|SF_IN_PAR)) && maxcount <= REG_INFTY/3) /* Complement check for big count */ diff --git a/t/lib/warnings/regcomp b/t/lib/warnings/regcomp index ceca441..b9cbecc 100644 --- a/t/lib/warnings/regcomp +++ b/t/lib/warnings/regcomp @@ -47,15 +47,6 @@ $a =~ /(?=a)*/ ; EXPECT (?=a)* matches null string many times in regex; marked by <-- HERE in m/(?=a)* <-- HERE / at - line 4. ######## -# regcomp.c [S_study_chunk] -use warnings 'regexp' ; -$_ = "" ; -/(?=a)?/; -no warnings 'regexp' ; -/(?=a)?/; -EXPECT -Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in m/(?=a)? <-- HERE / at - line 4. -######## # regcomp.c [S_regatom] $x = '\m' ; use warnings 'regexp' ; diff --git a/t/run/kill_perl.t b/t/run/kill_perl.t index d782bb3..225208e 100644 --- a/t/run/kill_perl.t +++ b/t/run/kill_perl.t @@ -724,8 +724,6 @@ EXPECT ######## -w "x" =~ /(\G?x)?/; # core dump in 20000716.007 -EXPECT -Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in m/(\G?x)? <-- HERE / at - line 2. ######## # Bug 20010515.004 my @h = 1 .. 10;