From e5f8ae47fe8f9b9a421467e3ffe8953428a42509 Mon Sep 17 00:00:00 2001 From: Serguei Makarov Date: Wed, 24 Jul 2013 12:06:06 -0400 Subject: [PATCH] stapregex REWRITE -- further bug fixes for engine (2 testsuite errors remaining) --- stapregex-dfa.cxx | 9 +++++++++ stapregex-tree.cxx | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/stapregex-dfa.cxx b/stapregex-dfa.cxx index cd15b6738..676283c36 100644 --- a/stapregex-dfa.cxx +++ b/stapregex-dfa.cxx @@ -626,8 +626,17 @@ dfa::emit (translator_output *o) const #else o->newline() << "{"; o->newline(1); + + // XXX: workaround for empty regex + if (first->accepts) + { + o->newline() << outcome_snippets[first->accept_outcome]; + o->newline() << "goto yyfinish;"; + } + for (state *s = first; s; s = s->next) s->emit(o, this); + o->newline() << "yyfinish: ;"; o->newline(-1) << "}"; #endif diff --git a/stapregex-tree.cxx b/stapregex-tree.cxx index e1879a71e..ca6d6d07a 100644 --- a/stapregex-tree.cxx +++ b/stapregex-tree.cxx @@ -156,17 +156,17 @@ range_invert(range *old_ran) range ran(*old_ran); range *new_ran = new range; - char start = 1; + char start = '\1'; // exclude '\0' while (!ran.segments.empty()) { - char end = ran.segments.front().first; + char end = ran.segments.front().first - 1; if (start <= end) new_ran->segments.push_back(make_pair(start, end)); start = ran.segments.front().second + 1; ran.segments.pop_front(); } - if (start <= NUM_REAL_CHARS) - new_ran->segments.push_back(make_pair(start, NUM_REAL_CHARS)); + if (start < NUM_REAL_CHARS) + new_ran->segments.push_back(make_pair(start, NUM_REAL_CHARS-1)); return new_ran; } -- 2.43.5