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
-~----------~----~----~----~------~----~------~--~---

Reply via email to