Author: [EMAIL PROTECTED]
Date: Tue Nov 11 06:29:18 2008
New Revision: 734
Modified:
branches/experimental/regexp2000/src/jsregexp.cc
branches/experimental/regexp2000/src/jsregexp.h
branches/experimental/regexp2000/test/cctest/test-regexp.cc
Log:
Added propagation of the start set calculated for a choice node to the
nodes that are interested in its start set.
Modified: branches/experimental/regexp2000/src/jsregexp.cc
==============================================================================
--- branches/experimental/regexp2000/src/jsregexp.cc (original)
+++ branches/experimental/regexp2000/src/jsregexp.cc Tue Nov 11 06:29:18
2008
@@ -1545,6 +1545,21 @@
}
+class AddDispatchRange {
+ public:
+ AddDispatchRange(Analysis* analysis) : analysis_(analysis) { }
+ void Call(uc32 from, DispatchTable::Entry entry);
+ private:
+ Analysis* analysis_;
+};
+
+
+void AddDispatchRange::Call(uc32 from, DispatchTable::Entry entry) {
+ CharacterRange range(from, entry.to());
+ analysis_->table()->AddRange(range, analysis_->choice_index());
+}
+
+
void Analysis::VisitChoice(ChoiceNode* node) {
if (node->visited()) return;
node->set_visited(true);
@@ -1556,6 +1571,9 @@
data.Analyze(choices->at(i).node());
}
node->set_visited(false);
+ if (table() != NULL) {
+ data.table()->ForEach(AddDispatchRange(this));
+ }
}
Modified: branches/experimental/regexp2000/src/jsregexp.h
==============================================================================
--- branches/experimental/regexp2000/src/jsregexp.h (original)
+++ branches/experimental/regexp2000/src/jsregexp.h Tue Nov 11 06:29:18 2008
@@ -324,6 +324,9 @@
void AddRange(CharacterRange range, int value);
OutSet Get(uc16 value);
void Dump();
+
+ template <typename Callback>
+ void ForEach(Callback callback) { return tree()->ForEach(callback); }
private:
ZoneSplayTree<Config>* tree() { return &tree_; }
ZoneSplayTree<Config> tree_;
Modified: branches/experimental/regexp2000/test/cctest/test-regexp.cc
==============================================================================
--- branches/experimental/regexp2000/test/cctest/test-regexp.cc (original)
+++ branches/experimental/regexp2000/test/cctest/test-regexp.cc Tue Nov 11
06:29:18 2008
@@ -610,5 +610,5 @@
TEST(Graph) {
- Execute("(a|b|c|\\w|\\s)", "", true);
+ Execute("(a|b|c*|\\w|\\s)", "", true);
}
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---