You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

137 lines
3.8 KiB

Fri Mar 16 19:18:02 EET 2007 Ville Laurikari <vl@iki.fi>
* Refactoring.
diff -rN -u old-stable/lib/tre-compile.c new-stable/lib/tre-compile.c
--- old-stable/lib/tre-compile.c 2007-11-04 20:27:45.000000000 +0200
+++ new-stable/lib/tre-compile.c 2007-11-04 20:27:45.000000000 +0200
@@ -1,7 +1,7 @@
/*
tre-compile.c - TRE regex compiler
- Copyright (c) 2001-2006 Ville Laurikari <vl@iki.fi>
+ Copyright (c) 2001-2007 Ville Laurikari <vl@iki.fi>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -127,6 +127,30 @@
int next_tag;
} tre_tag_states_t;
+
+/* Go through `regset' and set submatch data for submatches that are
+ using this tag. */
+static void
+tre_purge_regset(int *regset, tre_tnfa_t *tnfa, int tag)
+{
+ int i;
+
+ for (i = 0; regset[i] >= 0; i++)
+ {
+ int id = regset[i] / 2;
+ int start = !(regset[i] % 2);
+ DPRINT((" Using tag %d for %s offset of "
+ "submatch %d\n", tag,
+ start ? "start" : "end", id));
+ if (start)
+ tnfa->submatch_data[id].so_tag = tag;
+ else
+ tnfa->submatch_data[id].eo_tag = tag;
+ }
+ regset[0] = -1;
+}
+
+
/* Adds tags to appropriate locations in the parse tree in `tree', so that
subexpressions marked for submatch addressing can be traced. */
static reg_errcode_t
@@ -281,20 +305,7 @@
minimal_tag = -1;
num_minimals++;
}
- /* Go through the regset and set submatch data for
- submatches that are using this tag. */
- for (i = 0; regset[i] >= 0; i++)
- {
- int id = regset[i] / 2;
- int start = !(regset[i] % 2);
- DPRINT((" Using tag %d for %s offset of "
- "submatch %d\n", tag,
- start ? "start" : "end", id));
- if (start)
- tnfa->submatch_data[id].so_tag = tag;
- else
- tnfa->submatch_data[id].eo_tag = tag;
- }
+ tre_purge_regset(regset, tnfa, tag);
}
else
{
@@ -394,20 +405,7 @@
minimal_tag = -1;
num_minimals++;
}
- /* Go through the regset and set submatch data for
- submatches that are using this tag. */
- for (i = 0; regset[i] >= 0; i++)
- {
- int id = regset[i] / 2;
- int start = !(regset[i] % 2);
- DPRINT((" Using tag %d for %s offset of "
- "submatch %d\n", tag,
- start ? "start" : "end", id));
- if (start)
- tnfa->submatch_data[id].so_tag = tag;
- else
- tnfa->submatch_data[id].eo_tag = tag;
- }
+ tre_purge_regset(regset, tnfa, tag);
}
DPRINT((" num_tags++\n"));
@@ -479,20 +477,7 @@
minimal_tag = -1;
num_minimals++;
}
- /* Go through the regset and set submatch data for
- submatches that are using this tag. */
- for (i = 0; regset[i] >= 0; i++)
- {
- int id = regset[i] / 2;
- int start = !(regset[i] % 2);
- DPRINT((" Using tag %d for %s offset of "
- "submatch %d\n", tag,
- start ? "start" : "end", id));
- if (start)
- tnfa->submatch_data[id].so_tag = tag;
- else
- tnfa->submatch_data[id].eo_tag = tag;
- }
+ tre_purge_regset(regset, tnfa, tag);
}
DPRINT((" num_tags++\n"));
@@ -640,23 +625,7 @@
} /* end while(tre_stack_num_objects(stack) > bottom) */
if (!first_pass)
- {
- int i;
- /* Go through the regset and set submatch data for
- submatches that are using this tag. */
- for (i = 0; regset[i] >= 0; i++)
- {
- int id = regset[i] / 2;
- int start = !(regset[i] % 2);
- DPRINT((" Using tag %d for %s offset of "
- "submatch %d\n", num_tags,
- start ? "start" : "end", id));
- if (start)
- tnfa->submatch_data[id].so_tag = num_tags;
- else
- tnfa->submatch_data[id].eo_tag = num_tags;
- }
- }
+ tre_purge_regset(regset, tnfa, tag);
if (!first_pass && minimal_tag >= 0)
{