commit e942a8e5fcbc642c352ca9371014da9ab5cc9613
parent 9cb7d376bcfefe377a24b24008288ea811d233a4
Author: Sebastian <sebastian@sebsite.pw>
Date: Sun, 1 Dec 2024 20:23:21 -0500
regex: fix memory leaks
Signed-off-by: Sebastian <sebastian@sebsite.pw>
Diffstat:
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/regex/+test.ha b/regex/+test.ha
@@ -31,13 +31,13 @@ fn run_find_case(
};
return;
};
+ defer finish(&re);
if (expected == matchres::ERROR) {
fmt::errorfln("Expected expression /{}/ to have error caught during compilation, but it did not",
expr)!;
abort();
};
- defer finish(&re);
const result = find(&re, string);
defer result_free(result);
diff --git a/regex/regex.ha b/regex/regex.ha
@@ -223,6 +223,7 @@ export fn compile(expr: str) (regex | error) = {
let iter = strings::iter(expr);
let r_idx = 0z;
let jump_idxs: []size = [];
+ defer free(jump_idxs);
let in_bracket = false;
let skip_charclass_rest = false;
let bracket_idx = -1;
@@ -306,7 +307,7 @@ export fn compile(expr: str) (regex | error) = {
assert(insts[jump_idx] is inst_jump);
insts[jump_idx] = (len(insts) - 1): inst_jump;
};
- jump_idxs = [];
+ delete(jump_idxs[..]);
case '|' =>
append(insts, types::SIZE_MAX: inst_jump);
const origin = match (find_last_groupstart(&insts)) {
@@ -431,7 +432,6 @@ export fn compile(expr: str) (regex | error) = {
assert(insts[jump_idx] is inst_jump);
insts[jump_idx] = len(insts): inst_jump;
};
- jump_idxs = [];
if (len(insts) == 0 || !(insts[len(insts) - 1] is inst_match)) {
append(insts, false: inst_match);