From 56da250d69615d70774dbc361fa2693cca1e3df4 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 12 May 2022 12:11:28 -0400 Subject: Split backref/named captures into separate concepts for performance reasons. --- pattern.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'pattern.c') diff --git a/pattern.c b/pattern.c index 53970ac..edd007d 100644 --- a/pattern.c +++ b/pattern.c @@ -479,7 +479,13 @@ static pat_t *_bp_simplepattern(const char *str, const char *end, bool inside_st size_t namelen = 0; const char *a = after_name(str, end); const char *eq = a; - if (a > str && !matchstr(&eq, "=>", false, end) && matchchar(&eq, '=', false, end)) { + bool backreffable = false; + if (a > str && matchchar(&eq, ':', false, end)) { + name = str; + namelen = (size_t)(a-str); + str = eq; + backreffable = true; + } else if (a > str && !matchstr(&eq, "=>", false, end) && matchchar(&eq, '=', false, end)) { name = str; namelen = (size_t)(a-str); str = eq; @@ -492,6 +498,7 @@ static pat_t *_bp_simplepattern(const char *str, const char *end, bool inside_st capture->args.capture.capture_pat = pat; capture->args.capture.name = name; capture->args.capture.namelen = namelen; + capture->args.capture.backreffable = backreffable; return capture; } // Start of file/line -- cgit v1.2.3