Diff
Modified: trunk/Source/WebCore/ChangeLog (228594 => 228595)
--- trunk/Source/WebCore/ChangeLog 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/ChangeLog 2018-02-17 06:01:58 UTC (rev 228595)
@@ -1,3 +1,44 @@
+2018-02-16 Zalan Bujtas <[email protected]>
+
+ [RenderTreeBuilder] Cleanup RenderTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=182899
+ <rdar://problem/37627888>
+
+ Reviewed by Antti Koivisto.
+
+ No change in functionality.
+
+ * rendering/RenderBlockFlow.cpp:
+ (WebCore::RenderBlockFlow::styleDidChange):
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::takeChild):
+ (WebCore::RenderTreeBuilder::moveChildTo):
+ (WebCore::RenderTreeBuilder::moveAllChildrenTo):
+ (WebCore::RenderTreeBuilder::moveChildrenTo):
+ (WebCore::RenderTreeBuilder::moveAllChildrenIncludingFloatsTo):
+ (WebCore::RenderTreeBuilder::makeChildrenNonInline):
+ (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
+ (WebCore::RenderTreeBuilder::takeChildFromRenderMenuList): Deleted.
+ (WebCore::RenderTreeBuilder::takeChildFromRenderButton): Deleted.
+ * rendering/updating/RenderTreeBuilder.h:
+ (WebCore::RenderTreeBuilder::current):
+ * rendering/updating/RenderTreeBuilderBlock.cpp:
+ (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
+ * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
+ (WebCore::RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo):
+ * rendering/updating/RenderTreeBuilderFormControls.cpp:
+ (WebCore::RenderTreeBuilder::FormControls::takeChild):
+ * rendering/updating/RenderTreeBuilderFormControls.h:
+ * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
+ (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
+ (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
+ * rendering/updating/RenderTreeBuilderRuby.cpp:
+ (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
+ (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
+ (WebCore::RenderTreeBuilder::Ruby::takeChild):
+ * rendering/updating/RenderTreeBuilderTable.cpp:
+ (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
+
2018-02-16 Daniel Bates <[email protected]>
Remove dead code for UTF-32
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -2023,7 +2023,7 @@
// Fresh floats need to be reparented if they actually belong to the previous anonymous block.
// It copies the logic of RenderBlock::addChildIgnoringContinuation
if (noLongerAffectsParentBlock() && style().isFloating() && previousSibling() && previousSibling()->isAnonymousBlock())
- RenderTreeBuilder::current()->moveChildTo(downcast<RenderBoxModelObject>(*parent()), &downcast<RenderBoxModelObject>(*previousSibling()), this, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ RenderTreeBuilder::current()->moveChildTo(downcast<RenderBoxModelObject>(*parent()), downcast<RenderBoxModelObject>(*previousSibling()), *this, RenderTreeBuilder::NormalizeAfterInsertion::No);
if (diff >= StyleDifferenceRepaint) {
// FIXME: This could use a cheaper style-only test instead of SimpleLineLayout::canUseFor.
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -286,10 +286,10 @@
return rubyBuilder().takeChild(downcast<RenderRubyRun>(parent), child);
if (is<RenderMenuList>(parent))
- return takeChildFromRenderMenuList(downcast<RenderMenuList>(parent), child);
+ return formControlsBuilder().takeChild(downcast<RenderMenuList>(parent), child);
if (is<RenderButton>(parent))
- return takeChildFromRenderButton(downcast<RenderButton>(parent), child);
+ return formControlsBuilder().takeChild(downcast<RenderButton>(parent), child);
if (is<RenderGrid>(parent))
return takeChildFromRenderGrid(downcast<RenderGrid>(parent), child);
@@ -377,46 +377,46 @@
newChild->setHasOutlineAutoAncestor();
}
-void RenderTreeBuilder::moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
+void RenderTreeBuilder::moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject& child, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
{
// We assume that callers have cleared their positioned objects list for child moves so the
// positioned renderer maps don't become stale. It would be too slow to do the map lookup on each call.
ASSERT(normalizeAfterInsertion == NormalizeAfterInsertion::No || !is<RenderBlock>(from) || !downcast<RenderBlock>(from).hasPositionedObjects());
- ASSERT(&from == child->parent());
- ASSERT(!beforeChild || to == beforeChild->parent());
- if (normalizeAfterInsertion == NormalizeAfterInsertion::Yes && (to->isRenderBlock() || to->isRenderInline())) {
+ ASSERT(&from == child.parent());
+ ASSERT(!beforeChild || &to == beforeChild->parent());
+ if (normalizeAfterInsertion == NormalizeAfterInsertion::Yes && (to.isRenderBlock() || to.isRenderInline())) {
// Takes care of adding the new child correctly if toBlock and fromBlock
// have different kind of children (block vs inline).
- auto childToMove = takeChildFromRenderElement(from, *child);
- insertChild(*to, WTFMove(childToMove), beforeChild);
+ auto childToMove = takeChildFromRenderElement(from, child);
+ insertChild(to, WTFMove(childToMove), beforeChild);
} else {
- auto childToMove = takeChildFromRenderElement(from, *child);
- insertChildToRenderElementInternal(*to, WTFMove(childToMove), beforeChild);
+ auto childToMove = takeChildFromRenderElement(from, child);
+ insertChildToRenderElementInternal(to, WTFMove(childToMove), beforeChild);
}
}
-void RenderTreeBuilder::moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, NormalizeAfterInsertion normalizeAfterInsertion)
+void RenderTreeBuilder::moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject& child, NormalizeAfterInsertion normalizeAfterInsertion)
{
moveChildTo(from, to, child, nullptr, normalizeAfterInsertion);
}
-void RenderTreeBuilder::moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, NormalizeAfterInsertion normalizeAfterInsertion)
+void RenderTreeBuilder::moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, NormalizeAfterInsertion normalizeAfterInsertion)
{
moveAllChildrenTo(from, to, nullptr, normalizeAfterInsertion);
}
-void RenderTreeBuilder::moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
+void RenderTreeBuilder::moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
{
moveChildrenTo(from, to, from.firstChild(), nullptr, beforeChild, normalizeAfterInsertion);
}
-void RenderTreeBuilder::moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion normalizeAfterInsertion)
+void RenderTreeBuilder::moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion normalizeAfterInsertion)
{
moveChildrenTo(from, to, startChild, endChild, nullptr, normalizeAfterInsertion);
}
-void RenderTreeBuilder::moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
+void RenderTreeBuilder::moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
{
// This condition is rarely hit since this function is usually called on
// anonymous blocks which can no longer carry positioned objects (see r120761)
@@ -427,7 +427,7 @@
downcast<RenderBlockFlow>(from).removeFloatingObjects();
}
- ASSERT(!beforeChild || to == beforeChild->parent());
+ ASSERT(!beforeChild || &to == beforeChild->parent());
for (RenderObject* child = startChild; child && child != endChild; ) {
// Save our next sibling as moveChildTo will clear it.
RenderObject* nextSibling = child->nextSibling();
@@ -449,7 +449,7 @@
nextSibling = nextSibling->nextSibling();
}
- moveChildTo(from, to, child, beforeChild, normalizeAfterInsertion);
+ moveChildTo(from, to, *child, beforeChild, normalizeAfterInsertion);
child = nextSibling;
}
}
@@ -460,7 +460,7 @@
blockFlowBuilder().moveAllChildrenIncludingFloatsTo(downcast<RenderBlockFlow>(from), to, normalizeAfterInsertion);
return;
}
- moveAllChildrenTo(from, &to, normalizeAfterInsertion);
+ moveAllChildrenTo(from, to, normalizeAfterInsertion);
}
void RenderTreeBuilder::makeChildrenNonInline(RenderBlock& parent, RenderObject* insertionPoint)
@@ -496,7 +496,7 @@
auto newBlock = parent.createAnonymousBlock();
auto& block = *newBlock;
insertChildToRenderElementInternal(parent, WTFMove(newBlock), inlineRunStart);
- moveChildrenTo(parent, &block, inlineRunStart, child, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ moveChildrenTo(parent, block, inlineRunStart, child, RenderTreeBuilder::NormalizeAfterInsertion::No);
}
#ifndef NDEBUG
for (RenderObject* c = parent.firstChild(); c; c = c->nextSibling())
@@ -525,7 +525,7 @@
// See for example RenderTableCell:clippedOverflowRectForRepaint.
markBoxForRelayoutAfterSplit(*parentBox);
insertChildToRenderElementInternal(*parentBox, WTFMove(newPostBox), boxToSplit.nextSibling());
- moveChildrenTo(boxToSplit, &postBox, beforeChild, nullptr, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
+ moveChildrenTo(boxToSplit, postBox, beforeChild, nullptr, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
markBoxForRelayoutAfterSplit(boxToSplit);
markBoxForRelayoutAfterSplit(postBox);
@@ -658,24 +658,6 @@
multiColumnBuilder().updateAfterDescendants(downcast<RenderBlockFlow>(renderer));
}
-RenderPtr<RenderObject> RenderTreeBuilder::takeChildFromRenderMenuList(RenderMenuList& parent, RenderObject& child)
-{
- auto* innerRenderer = parent.innerRenderer();
- if (!innerRenderer || &child == innerRenderer)
- return blockBuilder().takeChild(parent, child);
- return takeChild(*innerRenderer, child);
-}
-
-RenderPtr<RenderObject> RenderTreeBuilder::takeChildFromRenderButton(RenderButton& parent, RenderObject& child)
-{
- auto* innerRenderer = parent.innerRenderer();
- if (!innerRenderer || &child == innerRenderer || child.parent() == &parent) {
- ASSERT(&child == innerRenderer || !innerRenderer);
- return blockBuilder().takeChild(parent, child);
- }
- return takeChild(*innerRenderer, child);
-}
-
RenderPtr<RenderObject> RenderTreeBuilder::takeChildFromRenderGrid(RenderGrid& parent, RenderObject& child)
{
auto takenChild = blockBuilder().takeChild(parent, child);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-02-17 06:01:58 UTC (rev 228595)
@@ -29,21 +29,7 @@
namespace WebCore {
-class RenderButton;
class RenderGrid;
-class RenderMathMLFenced;
-class RenderMenuList;
-class RenderRubyAsBlock;
-class RenderRubyAsInline;
-class RenderRubyBase;
-class RenderRubyRun;
-class RenderSVGContainer;
-class RenderSVGInline;
-class RenderSVGRoot;
-class RenderSVGText;
-class RenderTable;
-class RenderTableRow;
-class RenderTableSection;
class RenderTreeUpdater;
class RenderTreeBuilder {
@@ -51,39 +37,48 @@
RenderTreeBuilder(RenderView&);
~RenderTreeBuilder();
+ // This avoids having to convert all sites that need RenderTreeBuilder in one go.
+ // FIXME: Remove.
+ static RenderTreeBuilder* current() { return s_current; }
+
void insertChild(RenderTreePosition&, RenderPtr<RenderObject>);
void insertChild(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
- void insertChildIgnoringContinuation(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
RenderPtr<RenderObject> takeChild(RenderElement&, RenderObject&) WARN_UNUSED_RETURN;
+ // NormalizeAfterInsertion::Yes ensures that the destination subtree is consistent after the insertion (anonymous wrappers etc).
+ enum class NormalizeAfterInsertion { No, Yes };
+ void moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject& child, NormalizeAfterInsertion);
+
void updateAfterDescendants(RenderElement&);
+ void removeFromParentAndDestroyCleaningUpAnonymousWrappers(RenderObject& child);
- // This avoids having to convert all sites that need RenderTreeBuilder in one go.
- // FIXME: Remove.
- static RenderTreeBuilder* current() { return s_current; }
-
- // These functions are temporary until after all block/inline/continuation code is moved over.
- RenderPtr<RenderObject> takeChildFromRenderElement(RenderElement& parent, RenderObject& child) WARN_UNUSED_RETURN;
- void insertChildToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
-
void childFlowStateChangesAndAffectsParentBlock(RenderElement& child);
void childFlowStateChangesAndNoLongerAffectsParentBlock(RenderElement& child);
- void removeFromParentAndDestroyCleaningUpAnonymousWrappers(RenderObject& child);
void multiColumnDescendantInserted(RenderMultiColumnFlow&, RenderObject& newDescendant);
- // NormalizeAfterInsertion::Yes ensures that the destination subtree is consistent after the insertion (anonymous wrappers etc).
- enum class NormalizeAfterInsertion { No, Yes };
- void moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, RenderObject* beforeChild, NormalizeAfterInsertion);
- void moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, NormalizeAfterInsertion);
- void moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, NormalizeAfterInsertion);
- void moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* beforeChild, NormalizeAfterInsertion);
+private:
+ void insertChildIgnoringContinuation(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+ void insertChildToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+
+ RenderPtr<RenderObject> takeChildFromRenderElement(RenderElement& parent, RenderObject& child) WARN_UNUSED_RETURN;
+ RenderPtr<RenderObject> takeChildFromRenderGrid(RenderGrid& parent, RenderObject& child) WARN_UNUSED_RETURN;
+
+ void moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject& child, RenderObject* beforeChild, NormalizeAfterInsertion);
// Move all of the kids from |startChild| up to but excluding |endChild|. 0 can be passed as the |endChild| to denote
// that all the kids from |startChild| onwards should be moved.
- void moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion);
- void moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion);
+ void moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion);
+ void moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion);
+ void moveAllChildrenIncludingFloatsTo(RenderBlock& from, RenderBlock& toBlock, RenderTreeBuilder::NormalizeAfterInsertion);
+ void moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, NormalizeAfterInsertion);
+ void moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject& to, RenderObject* beforeChild, NormalizeAfterInsertion);
-private:
+ RenderObject* splitAnonymousBoxesAroundChild(RenderBox& parent, RenderObject* beforeChild);
+ void makeChildrenNonInline(RenderBlock& parent, RenderObject* insertionPoint = nullptr);
+ void removeAnonymousWrappersForInlineChildrenIfNeeded(RenderElement& parent);
+
class FirstLetter;
class List;
class MultiColumn;
@@ -96,18 +91,6 @@
class SVG;
class MathML;
- RenderObject* splitAnonymousBoxesAroundChild(RenderBox& parent, RenderObject* beforeChild);
- void makeChildrenNonInline(RenderBlock& parent, RenderObject* insertionPoint = nullptr);
- void removeAnonymousWrappersForInlineChildrenIfNeeded(RenderElement& parent);
- RenderPtr<RenderObject> takeChildFromRenderMenuList(RenderMenuList& parent, RenderObject& child);
- RenderPtr<RenderObject> takeChildFromRenderButton(RenderButton& parent, RenderObject& child);
- RenderPtr<RenderObject> takeChildFromRenderGrid(RenderGrid& parent, RenderObject& child);
-
- void moveAllChildrenIncludingFloatsTo(RenderBlock& from, RenderBlock& toBlock, RenderTreeBuilder::NormalizeAfterInsertion);
-
- void insertChildToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
- void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
-
FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; }
List& listBuilder() { return *m_listBuilder; }
MultiColumn& multiColumnBuilder() { return *m_multiColumnBuilder; }
@@ -121,7 +104,6 @@
MathML& mathMLBuilder() { return *m_mathMLBuilder; }
RenderView& m_view;
-
RenderTreeBuilder* m_previous { nullptr };
static RenderTreeBuilder* s_current;
@@ -139,4 +121,3 @@
};
}
-
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -367,7 +367,7 @@
auto* nextSibling = child.nextSibling();
auto toBeDeleted = m_builder.takeChildFromRenderElement(parent, child);
- m_builder.moveAllChildrenTo(child, &parent, nextSibling, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveAllChildrenTo(child, parent, nextSibling, RenderTreeBuilder::NormalizeAfterInsertion::No);
// Delete the now-empty block's lines and nuke it.
child.deleteLines();
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -47,7 +47,7 @@
void RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo(RenderBlockFlow& from, RenderBlock& to, RenderTreeBuilder::NormalizeAfterInsertion normalizeAfterInsertion)
{
- m_builder.moveAllChildrenTo(from, &to, normalizeAfterInsertion);
+ m_builder.moveAllChildrenTo(from, to, normalizeAfterInsertion);
from.addFloatsToNewParent(downcast<RenderBlockFlow>(to));
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -48,6 +48,25 @@
parent.didInsertChild(newChild, beforeChild);
}
+RenderPtr<RenderObject> RenderTreeBuilder::FormControls::takeChild(RenderMenuList& parent, RenderObject& child)
+{
+ auto* innerRenderer = parent.innerRenderer();
+ if (!innerRenderer || &child == innerRenderer)
+ return m_builder.blockBuilder().takeChild(parent, child);
+ return m_builder.takeChild(*innerRenderer, child);
+}
+
+RenderPtr<RenderObject> RenderTreeBuilder::FormControls::takeChild(RenderButton& parent, RenderObject& child)
+{
+ auto* innerRenderer = parent.innerRenderer();
+ if (!innerRenderer || &child == innerRenderer || child.parent() == &parent) {
+ ASSERT(&child == innerRenderer || !innerRenderer);
+ return m_builder.blockBuilder().takeChild(parent, child);
+ }
+ return m_builder.takeChild(*innerRenderer, child);
+}
+
+
RenderBlock& RenderTreeBuilder::FormControls::findOrCreateParentForChild(RenderButton& parent)
{
auto* innerRenderer = parent.innerRenderer();
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.h (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.h 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderFormControls.h 2018-02-17 06:01:58 UTC (rev 228595)
@@ -40,6 +40,9 @@
void insertChild(RenderButton& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
void insertChild(RenderMenuList& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
+ RenderPtr<RenderObject> takeChild(RenderButton& parent, RenderObject& child) WARN_UNUSED_RETURN;
+ RenderPtr<RenderObject> takeChild(RenderMenuList& parent, RenderObject& child) WARN_UNUSED_RETURN;
+
private:
RenderBlock& findOrCreateParentForChild(RenderButton&);
RenderBlock& findOrCreateParentForChild(RenderMenuList&);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -172,12 +172,12 @@
m_builder.blockBuilder().insertChild(flow, WTFMove(newFragmentedFlow), nullptr);
// Reparent children preceding the fragmented flow into the fragmented flow.
- m_builder.moveChildrenTo(flow, &fragmentedFlow, flow.firstChild(), &fragmentedFlow, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
+ m_builder.moveChildrenTo(flow, fragmentedFlow, flow.firstChild(), &fragmentedFlow, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
if (flow.isFieldset()) {
// Keep legends out of the flow thread.
for (auto& box : childrenOfType<RenderBox>(fragmentedFlow)) {
if (box.isLegend())
- m_builder.moveChildTo(fragmentedFlow, &flow, &box, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
+ m_builder.moveChildTo(fragmentedFlow, flow, box, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
}
}
@@ -185,7 +185,7 @@
// Keep the middle block out of the flow thread.
for (auto& element : childrenOfType<RenderElement>(fragmentedFlow)) {
if (!downcast<RenderLinesClampFlow>(fragmentedFlow).isChildAllowedInFragmentedFlow(flow, element))
- m_builder.moveChildTo(fragmentedFlow, &flow, &element, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
+ m_builder.moveChildTo(fragmentedFlow, flow, element, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
}
}
@@ -215,7 +215,7 @@
columnSet->removeFromParentAndDestroy(m_builder);
flow.clearMultiColumnFlow();
- m_builder.moveAllChildrenTo(multiColumnFlow, &flow, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
+ m_builder.moveAllChildrenTo(multiColumnFlow, flow, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
multiColumnFlow.removeFromParentAndDestroy(m_builder);
for (auto& parentAndSpanner : parentAndSpannerList)
m_builder.insertChild(*parentAndSpanner.first, WTFMove(parentAndSpanner.second));
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -142,8 +142,9 @@
m_builder.insertChildToRenderElementInternal(to, WTFMove(newToBlock));
}
}
+ ASSERT(toBlock);
// Move our inline children into the target block we determined above.
- m_builder.moveChildrenTo(from, toBlock, from.firstChild(), beforeChild, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveChildrenTo(from, *toBlock, from.firstChild(), beforeChild, RenderTreeBuilder::NormalizeAfterInsertion::No);
}
void RenderTreeBuilder::Ruby::moveBlockChildren(RenderRubyBase& from, RenderRubyBase& to, RenderObject* beforeChild)
@@ -163,12 +164,12 @@
&& lastChildThere && lastChildThere->isAnonymousBlock() && lastChildThere->childrenInline()) {
auto* anonBlockHere = downcast<RenderBlock>(firstChildHere);
auto* anonBlockThere = downcast<RenderBlock>(lastChildThere);
- m_builder.moveAllChildrenTo(*anonBlockHere, anonBlockThere, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
+ m_builder.moveAllChildrenTo(*anonBlockHere, *anonBlockThere, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
anonBlockHere->deleteLines();
anonBlockHere->removeFromParentAndDestroy(m_builder);
}
// Move all remaining children normally.
- m_builder.moveChildrenTo(from, &to, from.firstChild(), beforeChild, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveChildrenTo(from, to, from.firstChild(), beforeChild, RenderTreeBuilder::NormalizeAfterInsertion::No);
}
void RenderTreeBuilder::Ruby::moveChildren(RenderRubyBase& from, RenderRubyBase& to)
@@ -438,8 +439,8 @@
RenderRubyBase* rightBase = rightRun.rubyBase();
// Collect all children in a single base, then swap the bases.
moveChildren(*rightBase, *base);
- m_builder.moveChildTo(parent, &rightRun, base, RenderTreeBuilder::NormalizeAfterInsertion::No);
- m_builder.moveChildTo(rightRun, &parent, rightBase, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveChildTo(parent, rightRun, *base, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveChildTo(rightRun, parent, *rightBase, RenderTreeBuilder::NormalizeAfterInsertion::No);
// The now empty ruby base will be removed below.
ASSERT(!parent.rubyBase()->firstChild());
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp (228594 => 228595)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-17 05:49:59 UTC (rev 228594)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-17 06:01:58 UTC (rev 228595)
@@ -248,7 +248,7 @@
currentRow = currentRow->nextRow();
continue;
}
- m_builder.moveAllChildrenTo(*currentRow, rowToInsertInto, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveAllChildrenTo(*currentRow, *rowToInsertInto, RenderTreeBuilder::NormalizeAfterInsertion::No);
auto toDestroy = m_builder.takeChild(*section, *currentRow);
currentRow = currentRow->nextRow();
}