2009-03-31  Darin Adler  <darin@apple.com>

        Rolled out that last change until I can investigate the regression test failures it seems
        to have caused.

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::decrement):
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@42148 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index a0feaac..1cc025e 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,5 +1,15 @@
 2009-03-31  Darin Adler  <darin@apple.com>
 
+        Rolled out that last change until I can investigate the regression test failures it seems
+        to have caused.
+
+        * dom/PositionIterator.cpp:
+        (WebCore::PositionIterator::decrement):
+        * dom/PositionIterator.h:
+        (WebCore::PositionIterator::PositionIterator):
+
+2009-03-31  Darin Adler  <darin@apple.com>
+
         Reviewed by Eric Seidel.
 
         Bug 24621: PositionIterator doesn't iterate "after last child" positions when going backwards
diff --git a/WebCore/dom/PositionIterator.cpp b/WebCore/dom/PositionIterator.cpp
index 62ce8ee..781d352 100644
--- a/WebCore/dom/PositionIterator.cpp
+++ b/WebCore/dom/PositionIterator.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -85,14 +85,13 @@
         return;
     }
 
-    if (m_parent->hasChildNodes()) {
-        ASSERT(!m_offset);
-        m_parent = m_parent->lastChild();
-        if (!m_parent->hasChildNodes())
-            m_offset = lastOffsetForEditing(m_parent);
+    if (m_offset) {
+        m_offset = Position::uncheckedPreviousOffset(m_parent, m_offset);
     } else {
-        if (m_offset) {
-            m_offset = Position::uncheckedPreviousOffset(m_parent, m_offset);
+        if (m_parent->hasChildNodes()) {
+            m_parent = m_parent->lastChild();
+            if (!m_parent->hasChildNodes())
+                m_offset = lastOffsetForEditing(m_parent);
         } else {
             m_child = m_parent;
             m_parent = m_parent->parentNode();
diff --git a/WebCore/dom/PositionIterator.h b/WebCore/dom/PositionIterator.h
index c90c31c..98a2ccb 100644
--- a/WebCore/dom/PositionIterator.h
+++ b/WebCore/dom/PositionIterator.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -42,17 +42,18 @@
         , m_offset(0)
     {
     }
-    PositionIterator(const Position& position)
-        : m_parent(position.node())
-        , m_child(m_parent->childNode(position.m_offset))
-        , m_offset(m_parent->hasChildNodes() ? 0 : position.m_offset)
+
+    PositionIterator(const Position& pos)
+        : m_parent(pos.node())
+        , m_child(m_parent->childNode(pos.m_offset))
+        , m_offset(m_child ? 0 : pos.m_offset)
     {
     }
+    operator Position() const;
 
     void increment();
     void decrement();
 
-    operator Position() const;
     Node* node() const { return m_parent; }
     int offsetInLeafNode() const { return m_offset; }