diff --git a/lib/impure/re.nim b/lib/impure/re.nim index 652a92d55d..a200f27b67 100644 --- a/lib/impure/re.nim +++ b/lib/impure/re.nim @@ -45,6 +45,12 @@ type RegexError* = object of ValueError ## is raised if the pattern is no valid regular expression. +when defined(gcDestructors): + proc `=destroy`(x: var RegexDesc) = + pcre.free_substring(cast[cstring](x.h)) + if not isNil(x.e): + pcre.free_study(x.e) + proc raiseInvalidRegex(msg: string) {.noinline, noreturn.} = var e: ref RegexError new(e) @@ -73,7 +79,10 @@ proc re*(s: string, flags = {reStudy}): Regex = ## Note that Nim's ## extended raw string literals support the syntax ``re"[abc]"`` as ## a short form for ``re(r"[abc]")``. - new(result, finalizeRegEx) + when defined(gcDestructors): + result = Regex() + else: + new(result, finalizeRegEx) result.h = rawCompile(s, cast[cint](flags - {reStudy})) if reStudy in flags: var msg: cstring = ""