From 98d247645ba95270bd14790284500a699caebf52 Mon Sep 17 00:00:00 2001 From: kalibera Date: Wed, 20 Feb 2019 10:29:48 +0000 Subject: [PATCH] Performance optimization in gregexpr() from Toby Hocking. git-svn-id: https://svn.r-project.org/R/trunk@76138 00db46b3-68df-0310-9c12-caf00c1e9a41 --- src/main/grep.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/grep.c b/src/main/grep.c index 32d8d3491d0..7e04eaf9934 100644 --- a/src/main/grep.c +++ b/src/main/grep.c @@ -2385,6 +2385,7 @@ gregexpr_perl(const char *pattern, const char *string, SEXP capturebuf, capturelenbuf; SEXP matchbuf, matchlenbuf; /* buffers for storing multiple matches */ int bufsize = 1024; /* starting size for buffers */ + int slen = (int) strlen(string); PROTECT_INDEX cb, clb, mb, mlb; PROTECT_WITH_INDEX(capturebuf = @@ -2393,9 +2394,9 @@ gregexpr_perl(const char *pattern, const char *string, allocVector(INTSXP, bufsize*capture_count), &clb); PROTECT_WITH_INDEX(matchbuf = allocVector(INTSXP, bufsize), &mb); PROTECT_WITH_INDEX(matchlenbuf = allocVector(INTSXP, bufsize), &mlb); + while (!foundAll) { - int rc, slen = (int) strlen(string); - rc = pcre_exec(re_pcre, re_pe, string, slen, start, 0, ovector, + int rc = pcre_exec(re_pcre, re_pe, string, slen, start, 0, ovector, ovector_size); pcre_exec_error(rc, n); if (rc >= 0) {