summaryrefslogtreecommitdiffstats
path: root/generic/tclRegexp.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2017-02-01 15:03:59 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2017-02-01 15:03:59 (GMT)
commit3bf70f8a7d94966b183bc23250a2b45fd4248241 (patch)
treea3a8dd299606092b7219a6d8ae10b5deba724aab /generic/tclRegexp.c
parent8826c4b5dc048432fbed200da55eef080c75b32c (diff)
parent680d27740a871cd27464c07ed2afee0f4104dbd4 (diff)
downloadtcl-pyk_emptystring.zip
tcl-pyk_emptystring.tar.gz
tcl-pyk_emptystring.tar.bz2
merge trunkpyk_emptystring
Diffstat (limited to 'generic/tclRegexp.c')
-rw-r--r--generic/tclRegexp.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/generic/tclRegexp.c b/generic/tclRegexp.c
index ea25d4b..eb23f72 100644
--- a/generic/tclRegexp.c
+++ b/generic/tclRegexp.c
@@ -502,9 +502,16 @@ Tcl_RegExpMatchObj(
{
Tcl_RegExp re;
- re = Tcl_GetRegExpFromObj(interp, patternObj,
- TCL_REG_ADVANCED | TCL_REG_NOSUB);
- if (re == NULL) {
+ /*
+ * For performance reasons, first try compiling the RE without support for
+ * subexpressions. On failure, try again without TCL_REG_NOSUB in case the
+ * RE has backreferences in it. Closely related to [Bug 1366683]. If this
+ * still fails, an error message will be left in the interpreter.
+ */
+
+ if (!(re = Tcl_GetRegExpFromObj(interp, patternObj,
+ TCL_REG_ADVANCED | TCL_REG_NOSUB))
+ && !(re = Tcl_GetRegExpFromObj(interp, patternObj, TCL_REG_ADVANCED))) {
return -1;
}
return Tcl_RegExpExecObj(interp, re, textObj, 0 /* offset */,