[augeas-devel] [PATCH 1 of 2] Don't use registers in split_iter
David Lutterkort
dlutter at redhat.com
Sun Aug 10 04:51:51 UTC 2008
2 files changed, 8 insertions(+), 27 deletions(-)
src/get.c | 18 ++++--------------
src/put.c | 17 ++++-------------
# HG changeset patch
# User David Lutterkort <dlutter at redhat.com>
# Date 1218341704 25200
# Node ID 63fa252bd6f16b6b70f63abbf17f33131e8cdd34
# Parent 53884175f2e4662e699197dd49fd2cdc46f69873
Don't use registers in split_iter
The data in the registers was never used, calculating it causes some
overhead in the matcher.
diff -r 53884175f2e4 -r 63fa252bd6f1 src/get.c
--- a/src/get.c Fri Aug 08 15:46:06 2008 -0700
+++ b/src/get.c Sat Aug 09 21:15:04 2008 -0700
@@ -345,38 +345,28 @@
assert(lens->tag == L_STAR);
int count = 0;
- struct re_registers regs;
struct split *split = NULL;
struct regexp *ctype = lens->child->ctype;
- MEMZERO(®s, 1);
- if (ctype->re != NULL)
- ctype->re->regs_allocated = REGS_UNALLOCATED;
-
- const int reg = 0;
int pos = 0;
struct split *tail = NULL;
while (pos < outer->size) {
- count = regexp_match(ctype, outer->start, outer->size, pos, ®s);
+ count = regexp_match(ctype, outer->start, outer->size, pos, NULL);
if (count == -2) {
FIXME("Match failed - produce better error");
abort();
} else if (count == -1) {
break;
}
- tail = split_append(&split, tail,
- outer->start, regs.start[reg], regs.end[reg]);
+ tail = split_append(&split, tail, outer->start, pos, pos + count);
if (tail == NULL)
goto error;
- pos = regs.end[reg];
+ pos += count;
}
- done:
- free(regs.start);
- free(regs.end);
return split;
error:
list_free(split);
- goto done;
+ return NULL;
}
static int applies(struct lens *lens, struct split *split) {
diff -r 53884175f2e4 -r 63fa252bd6f1 src/put.c
--- a/src/put.c Fri Aug 08 15:46:06 2008 -0700
+++ b/src/put.c Sat Aug 09 21:15:04 2008 -0700
@@ -229,21 +229,14 @@
assert(lens->tag == L_STAR);
int count = 0;
- struct re_registers regs;
struct split *split = NULL;
struct regexp *atype = lens->child->atype;
- MEMZERO((®s), 1);
- if (atype->re != NULL)
- atype->re->regs_allocated = REGS_UNALLOCATED;
-
struct tree *cur = outer->tree;
- const int reg = 0;
int pos = outer->start;
struct split *tail = NULL;
while (pos < outer->end) {
- count = regexp_match(atype, outer->labels,
- outer->end, pos, ®s);
+ count = regexp_match(atype, outer->labels, outer->end, pos, NULL);
if (count == -2) {
FIXME("Match failed - produce better error");
abort();
@@ -251,17 +244,15 @@
break;
}
struct tree *follow = cur;
- for (int j = regs.start[reg]; j < regs.end[reg]; j++) {
+ for (int j = pos; j < pos + count; j++) {
if (outer->labels[j] == '/')
follow = follow->next;
}
tail = split_append(&split, tail, cur, follow,
- outer->labels, regs.start[reg], regs.end[reg]);
+ outer->labels, pos, pos + count);
cur = follow;
- pos = regs.end[reg];
+ pos += count;
}
- free(regs.start);
- free(regs.end);
return split;
}
More information about the augeas-devel
mailing list