[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(&regs, 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, &regs);
+        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((&regs), 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, &regs);
+        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