summaryrefslogtreecommitdiffstats
path: root/Modules/regexpr.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/regexpr.c')
-rw-r--r--Modules/regexpr.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/Modules/regexpr.c b/Modules/regexpr.c
index 6b6ccbef..2d30171 100644
--- a/Modules/regexpr.c
+++ b/Modules/regexpr.c
@@ -1,7 +1,3 @@
-/*
- * -*- mode: c-mode; c-file-style: python -*-
- */
-
/* regexpr.c
*
* Author: Tatu Ylonen <ylo@ngs.fi>
@@ -472,16 +468,15 @@ static int regexp_ansi_sequences;
#define MAX_NESTING 100 /* max nesting level of operators */
#define SYNTAX(ch) re_syntax_table[(unsigned char)(ch)]
-#define Sword 1
-static char re_syntax_table[256];
+char re_syntax_table[256];
-static void re_compile_initialize(void)
+void re_compile_initialize(void)
{
int a;
static int syntax_table_inited = 0;
-
+
if (!syntax_table_inited)
{
syntax_table_inited = 1;
@@ -491,7 +486,11 @@ static void re_compile_initialize(void)
for (a = 'A'; a <= 'Z'; a++)
re_syntax_table[a] = Sword;
for (a = '0'; a <= '9'; a++)
- re_syntax_table[a] = Sword;
+ re_syntax_table[a] = Sword | Sdigit;
+ re_syntax_table['_'] = Sword;
+ for (a = 9; a <= 13; a++)
+ re_syntax_table[a] = Swhitespace;
+ re_syntax_table[' '] = Swhitespace;
}
re_compile_initialized = 1;
for (a = 0; a < 256; a++)
@@ -602,13 +601,12 @@ static void re_compile_fastmap_aux(char *code,
return; /* we have already been here */
visited[pos] = 1;
for (;;)
- switch (code[pos++])
- {
+ switch (code[pos++]) {
case Cend:
- {
- *can_be_null = 1;
- return;
- }
+ {
+ *can_be_null = 1;
+ return;
+ }
case Cbol:
case Cbegbuf:
case Cendbuf:
@@ -1609,9 +1607,6 @@ int re_match(regexp_t bufp,
NEW_STATE(state, bufp->num_registers);
- if (!re_compile_initialized)
- re_compile_initialize();
-
continue_matching:
switch (*code++)
{
@@ -1883,11 +1878,11 @@ int re_match(regexp_t bufp,
{
if (text == textend)
goto fail;
- if (SYNTAX(*text) != Sword)
+ if (SYNTAX(*text) & Sword)
goto fail;
if (text == textstart)
goto continue_matching;
- if (SYNTAX(text[-1]) != Sword)
+ if (!(SYNTAX(text[-1]) & Sword))
goto continue_matching;
goto fail;
}
@@ -1895,11 +1890,11 @@ int re_match(regexp_t bufp,
{
if (text == textstart)
goto fail;
- if (SYNTAX(text[-1]) != Sword)
+ if (!(SYNTAX(text[-1]) & Sword))
goto fail;
if (text == textend)
goto continue_matching;
- if (SYNTAX(*text) == Sword)
+ if (SYNTAX(*text) & Sword)
goto fail;
goto continue_matching;
}
@@ -1910,7 +1905,7 @@ int re_match(regexp_t bufp,
if (text == textstart || text == textend)
goto continue_matching;
- if ((SYNTAX(text[-1]) == Sword) ^ (SYNTAX(*text) == Sword))
+ if ((SYNTAX(text[-1]) & Sword) ^ (SYNTAX(*text) & Sword))
goto continue_matching;
goto fail;
}
@@ -1920,21 +1915,21 @@ int re_match(regexp_t bufp,
* beginning and end of buffer. */
if (text == textstart || text == textend)
goto fail;
- if (!((SYNTAX(text[-1]) == Sword) ^ (SYNTAX(*text) == Sword)))
+ if (!((SYNTAX(text[-1]) & Sword) ^ (SYNTAX(*text) & Sword)))
goto fail;
goto continue_matching;
}
case Csyntaxspec:
{
NEXTCHAR(ch);
- if (SYNTAX(ch) != (unsigned char)*code++)
+ if (!(SYNTAX(ch) & (unsigned char)*code++))
goto fail;
goto continue_matching;
}
case Cnotsyntaxspec:
{
NEXTCHAR(ch);
- if (SYNTAX(ch) != (unsigned char)*code++)
+ if (SYNTAX(ch) & (unsigned char)*code++)
break;
goto continue_matching;
}
@@ -2067,3 +2062,10 @@ int re_search(regexp_t bufp,
}
return -1;
}
+
+/*
+** Local Variables:
+** mode: c
+** c-file-style: "python"
+** End:
+*/