hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

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:
Mregex/+test.ha | 2+-
Mregex/regex.ha | 4++--
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);