diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2000-03-11 10:08:47 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2000-03-11 10:08:47 +0000 |
commit | 96776eda41a10f1802094966189301751fcdd558 (patch) | |
tree | 53055a37fcdc55960e408805abc2c8e014874b1b | |
parent | 48a26b3aff3d4a22b7cc3f3ba0bb5977d168a801 (diff) | |
download | perl-96776eda41a10f1802094966189301751fcdd558.tar.gz |
fix optimizer bug in /^(?p{"a"})b/ (from Ilya Zakharevich)
p4raw-id: //depot/perl@5644
-rw-r--r-- | regcomp.c | 3 | ||||
-rwxr-xr-x | t/op/pat.t | 4 |
2 files changed, 6 insertions, 1 deletions
@@ -1222,7 +1222,7 @@ S_study_chunk(pTHX_ regnode **scanp, I32 *deltap, regnode *last, scan_data_t *da if (data) data->flags |= SF_HAS_EVAL; } - else if (OP(scan) == LOGICAL && scan->flags == 2) { /* Embedded */ + else if (OP(scan) == LOGICAL && scan->flags == 2) { /* Embedded follows */ if (flags & SCF_DO_SUBSTR) { scan_commit(data); data->longest = &(data->longest_float); @@ -1230,6 +1230,7 @@ S_study_chunk(pTHX_ regnode **scanp, I32 *deltap, regnode *last, scan_data_t *da is_inf = is_inf_internal = 1; if (flags & SCF_DO_STCLASS_OR) /* Allow everything */ cl_anything(data->start_class); + flags &= ~SCF_DO_STCLASS; } /* Else: zero-length, ignore. */ scan = regnext(scan); diff --git a/t/op/pat.t b/t/op/pat.t index 103e6132b5..7f20185e93 100755 --- a/t/op/pat.t +++ b/t/op/pat.t @@ -369,6 +369,10 @@ print "# ans='@ans'\n# expect='$expect'\nnot " if "@ans" ne $expect; print "ok $test\n"; $test++; +print "not " unless "abc" =~ /^(??{"a"})b/; +print "ok $test\n"; +$test++; + my $matched; $matched = qr/\((?:(?>[^()]+)|(??{$matched}))*\)/; |