aboutsummaryrefslogtreecommitdiff
path: root/match.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2021-01-17 23:28:19 -0800
committerBruce Hill <bruce@bruce-hill.com>2021-01-17 23:28:19 -0800
commitc577769a89614d41aa58cca9076fd85f727085a6 (patch)
tree4079257369c39a55d0a89475bcf5d7aa73d1ebab /match.c
parent379bf1b6c8632d7aa7215b1ef880a89794531ff5 (diff)
Updated REF and CAPTURE types to store direct pointers to names (with a
len size_t) instead of allocating memory.
Diffstat (limited to 'match.c')
-rw-r--r--match.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/match.c b/match.c
index 8e8f8e0..128e9da 100644
--- a/match.c
+++ b/match.c
@@ -171,8 +171,8 @@ match_t *match(def_t *defs, file_t *f, const char *str, pat_t *pat, unsigned int
}
case BP_STRING: {
if (&str[pat->len] > f->end) return NULL;
- if (ignorecase ? memicmp(str, pat->args.s, (size_t)pat->len) != 0
- : memcmp(str, pat->args.s, (size_t)pat->len) != 0)
+ if (ignorecase ? memicmp(str, pat->args.string, (size_t)pat->len) != 0
+ : memcmp(str, pat->args.string, (size_t)pat->len) != 0)
return NULL;
match_t *m = new_match();
m->pat = pat;
@@ -347,7 +347,7 @@ match_t *match(def_t *defs, file_t *f, const char *str, pat_t *pat, unsigned int
{ // Push backrefs and run matching, then cleanup
def_t *defs2 = defs;
if (m1->pat->type == BP_CAPTURE && m1->pat->args.capture.name)
- defs2 = with_backref(defs2, f, m1->pat->args.capture.name, m1);
+ defs2 = with_backref(defs2, f, m1->pat->args.capture.namelen, m1->pat->args.capture.name, m1);
// def_t *defs2 = with_backrefs(defs, f, m1);
m2 = match(defs2, f, m1->end, pat->args.multiple.second, ignorecase);
free_defs(&defs2, defs);
@@ -414,8 +414,8 @@ match_t *match(def_t *defs, file_t *f, const char *str, pat_t *pat, unsigned int
return m;
}
case BP_REF: {
- def_t *def = lookup(defs, pat->args.s);
- check(def != NULL, "Unknown identifier: '%s'", pat->args.s);
+ def_t *def = lookup(defs, pat->args.name.len, pat->args.name.name);
+ check(def != NULL, "Unknown identifier: '%.*s'", (int)pat->args.name.len, pat->args.name.name);
pat_t *ref = def->pat;
pat_t rec_op = {
@@ -540,7 +540,7 @@ static match_t *get_capture_by_num(match_t *m, int *n)
static match_t *get_capture_by_name(match_t *m, const char *name)
{
if (m->pat->type == BP_CAPTURE && m->pat->args.capture.name
- && streq(m->pat->args.capture.name, name))
+ && strncmp(m->pat->args.capture.name, name, m->pat->args.capture.namelen) == 0)
return m;
for (match_t *c = m->child; c; c = c->nextsibling) {
match_t *cap = get_capture_by_name(c, name);