Reviewers: Erik Corry, Description: Added propagation of the start set calculated for a choice node to the nodes that are interested in its start set.
Please review this at http://codereview.chromium.org/9771 Affected files: M src/jsregexp.h M src/jsregexp.cc M test/cctest/test-regexp.cc Index: src/jsregexp.cc diff --git a/src/jsregexp.cc b/src/jsregexp.cc index d09d2fa336d9cadc287edb81e9a62254cc00ccc1..1afaccfbf55694c4149be405b57c699437afb344 100644 --- a/src/jsregexp.cc +++ b/src/jsregexp.cc @@ -1545,6 +1545,21 @@ void Analysis::VisitEnd(EndNode* that) { } +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 @@ void Analysis::VisitChoice(ChoiceNode* node) { data.Analyze(choices->at(i).node()); } node->set_visited(false); + if (table() != NULL) { + data.table()->ForEach(AddDispatchRange(this)); + } } Index: src/jsregexp.h diff --git a/src/jsregexp.h b/src/jsregexp.h index 871a00810e6c739d45cdd6b72ed7117107733559..4ab6db0fc184313f131d47ee1d9f788db68da3df 100644 --- a/src/jsregexp.h +++ b/src/jsregexp.h @@ -324,6 +324,9 @@ class DispatchTable { 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_; Index: test/cctest/test-regexp.cc diff --git a/test/cctest/test-regexp.cc b/test/cctest/test-regexp.cc index a2b3c97d1af69cdc1cc9adcab7231b42b8457cac..f209da9f8ff9fcd7479736e6366b462b514baa9b 100644 --- a/test/cctest/test-regexp.cc +++ b/test/cctest/test-regexp.cc @@ -610,5 +610,5 @@ TEST(Assembler2) { 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 -~----------~----~----~----~------~----~------~--~---
