Discussion:
[PATCH 2/2] dfa: simplify constraint-dependency checking
(too old to reply)
Paul Eggert
2017-01-02 05:45:14 UTC
Permalink
Raw Message
* lib/dfa.c (prev_newline_constraint, prev_letter_constraint)
(prev_other_constraint): Remove.
(prev_newline_dependent, prev_letter_dependent):
Simplify, to avoid an unnecessary bitwise AND operation.
---
ChangeLog | 6 ++++++
lib/dfa.c | 22 ++--------------------
2 files changed, 8 insertions(+), 20 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 85436e1..2b8cbc1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2017-01-01 Paul Eggert <***@cs.ucla.edu>

+ dfa: simplify constraint-dependency checking
+ * lib/dfa.c (prev_newline_constraint, prev_letter_constraint)
+ (prev_other_constraint): Remove.
+ (prev_newline_dependent, prev_letter_dependent):
+ Simplify, to avoid an unnecessary bitwise AND operation.
+
dfa: prefer functions and constants to macros
* lib/dfa.c: Prefer constants to macros where either will do.
(streq, isasciidigit, newline_constraint)
diff --git a/lib/dfa.c b/lib/dfa.c
index 5b9de53..cd600aa 100644
--- a/lib/dfa.c
+++ b/lib/dfa.c
@@ -175,33 +175,15 @@ succeeds_in_context (int constraint, int prev, int curr)
}

/* The following describe what a constraint depends on. */
-static int
-prev_newline_constraint (int constraint)
-{
- return (constraint >> 2) & 0x111;
-}
-static int
-prev_letter_constraint (int constraint)
-{
- return (constraint >> 1) & 0x111;
-}
-static int
-prev_other_constraint (int constraint)
-{
- return constraint & 0x111;
-}
-
static bool
prev_newline_dependent (int constraint)
{
- return (prev_newline_constraint (constraint)
- != prev_other_constraint (constraint));
+ return ((constraint ^ constraint >> 2) & 0x111) != 0;
}
static bool
prev_letter_dependent (int constraint)
{
- return (prev_letter_constraint (constraint)
- != prev_other_constraint (constraint));
+ return ((constraint ^ constraint >> 1) & 0x111) != 0;
}

/* Tokens that match the empty string subject to some constraint actually
--
2.7.4
Loading...