[LFC][IFC] Use explicit 0_lu value instead of LayoutUnit { }
https://bugs.webkit.org/show_bug.cgi?id=204964
<rdar://problem/57714095>

Reviewed by Antti Koivisto.

From geometry computation point of view, it is really the 0 value and not an empty value.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
* layout/inlineformatting/InlineFormattingContextQuirks.cpp:
(WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints const):
* layout/inlineformatting/InlineLineBox.h:
(WebCore::Layout::LineBox::resetDescent):
(WebCore::Layout::LineBox::resetBaseline):
(WebCore::Layout::LineBox::Baseline::reset):
* layout/inlineformatting/InlineLineBreaker.cpp:
(WebCore::Layout::LineBreaker::wordBreakingBehavior const):
(WebCore::Layout::LineBreaker::Content::reset):
(WebCore::Layout::LineBreaker::Content::TrailingTrimmableContent::reset):
* layout/inlineformatting/InlineLineBuilder.cpp:
(WebCore::Layout::LineBuilder::ContinousContent::close):
(WebCore::Layout::LineBuilder::Run::Run):
(WebCore::Layout::LineBuilder::initialize):
(WebCore::Layout::LineBuilder::close):
(WebCore::Layout::LineBuilder::alignContentVertically):
(WebCore::Layout::LineBuilder::appendLineBreak):
(WebCore::Layout::LineBuilder::adjustBaselineAndLineHeight):
(WebCore::Layout::LineBuilder::TrimmableContent::trimTrailingRun):
(WebCore::Layout::LineBuilder::InlineItemRun::trailingLetterSpacing const):
(WebCore::Layout::LineBuilder::InlineItemRun::setCollapsesToZeroAdvanceWidth):
* layout/inlineformatting/InlineLineBuilder.h:
(WebCore::Layout::LineBuilder::TrimmableContent::reset):
* layout/inlineformatting/LineLayoutContext.cpp:
(WebCore::Layout::inlineItemWidth):
* layout/inlineformatting/text/TextUtil.h:
(WebCore::Layout::TextUtil::width): Deleted.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@253225 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 5241606..293ff55 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,43 @@
+2019-12-06  Zalan Bujtas  <zalan@apple.com>
+
+        [LFC][IFC] Use explicit 0_lu value instead of LayoutUnit { }
+        https://bugs.webkit.org/show_bug.cgi?id=204964
+        <rdar://problem/57714095>
+
+        Reviewed by Antti Koivisto.
+
+        From geometry computation point of view, it is really the 0 value and not an empty value. 
+
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
+        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
+        (WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints const):
+        * layout/inlineformatting/InlineLineBox.h:
+        (WebCore::Layout::LineBox::resetDescent):
+        (WebCore::Layout::LineBox::resetBaseline):
+        (WebCore::Layout::LineBox::Baseline::reset):
+        * layout/inlineformatting/InlineLineBreaker.cpp:
+        (WebCore::Layout::LineBreaker::wordBreakingBehavior const):
+        (WebCore::Layout::LineBreaker::Content::reset):
+        (WebCore::Layout::LineBreaker::Content::TrailingTrimmableContent::reset):
+        * layout/inlineformatting/InlineLineBuilder.cpp:
+        (WebCore::Layout::LineBuilder::ContinousContent::close):
+        (WebCore::Layout::LineBuilder::Run::Run):
+        (WebCore::Layout::LineBuilder::initialize):
+        (WebCore::Layout::LineBuilder::close):
+        (WebCore::Layout::LineBuilder::alignContentVertically):
+        (WebCore::Layout::LineBuilder::appendLineBreak):
+        (WebCore::Layout::LineBuilder::adjustBaselineAndLineHeight):
+        (WebCore::Layout::LineBuilder::TrimmableContent::trimTrailingRun):
+        (WebCore::Layout::LineBuilder::InlineItemRun::trailingLetterSpacing const):
+        (WebCore::Layout::LineBuilder::InlineItemRun::setCollapsesToZeroAdvanceWidth):
+        * layout/inlineformatting/InlineLineBuilder.h:
+        (WebCore::Layout::LineBuilder::TrimmableContent::reset):
+        * layout/inlineformatting/LineLayoutContext.cpp:
+        (WebCore::Layout::inlineItemWidth):
+        * layout/inlineformatting/text/TextUtil.h:
+        (WebCore::Layout::TextUtil::width): Deleted.
+
 2019-12-06  Keith Miller  <keith_miller@apple.com>
 
         Remove various .order files.
diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
index b723484..dd84a01 100644
--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
@@ -189,7 +189,7 @@
     }
 
     Vector<const Box*> formattingContextRootList;
-    auto usedHorizontalValues = UsedHorizontalValues { UsedHorizontalValues::Constraints { { }, { } } };
+    auto usedHorizontalValues = UsedHorizontalValues { UsedHorizontalValues::Constraints { 0_lu, 0_lu } };
     auto* layoutBox = root().firstInFlowOrFloatingChild();
     while (layoutBox) {
         if (layoutBox->establishesFormattingContext()) {
@@ -219,7 +219,7 @@
             auto contentWidth = (availableWidth ? intrinsicWidths->maximum : intrinsicWidths->minimum) - displayBox.horizontalMarginBorderAndPadding();
             displayBox.setContentBoxWidth(contentWidth);
         }
-        auto usedHorizontalValues = UsedHorizontalValues { UsedHorizontalValues::Constraints { { }, availableWidth } };
+        auto usedHorizontalValues = UsedHorizontalValues { UsedHorizontalValues::Constraints { 0_lu, availableWidth } };
         return computedIntrinsicWidthForConstraint(usedHorizontalValues);
     };
 
diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
index d13996a..8196417 100644
--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
@@ -85,7 +85,7 @@
 
     auto lineHeight = formattingRoot.style().lineHeight();
     if (lineHeight.isPercentOrCalculated()) {
-        auto initialBaselineOffset = LineBuilder::halfLeadingMetrics(formattingRoot.style().fontMetrics(), { }).ascent();
+        auto initialBaselineOffset = LineBuilder::halfLeadingMetrics(formattingRoot.style().fontMetrics(), 0_lu).ascent();
         return { initialBaselineOffset, initialBaselineOffset, LineBox::Baseline { strutBaselineOffset, strutHeight - strutBaselineOffset } };
     }
     // FIXME: The only reason why we use intValue() here is to match current inline tree (integral)behavior.
diff --git a/Source/WebCore/layout/inlineformatting/InlineLineBox.h b/Source/WebCore/layout/inlineformatting/InlineLineBox.h
index 4b23d78..33c45ce 100644
--- a/Source/WebCore/layout/inlineformatting/InlineLineBox.h
+++ b/Source/WebCore/layout/inlineformatting/InlineLineBox.h
@@ -92,7 +92,7 @@
     void setDescentIfGreater(LayoutUnit);
 
     void resetBaseline();
-    void resetDescent() { m_baseline.setDescent({ }); }
+    void resetDescent() { m_baseline.setDescent(0_lu); }
 
     void setLogicalTopLeft(LayoutPoint logicalTopLeft) { m_rect.setTopLeft(logicalTopLeft); }
     void setLogicalHeight(LayoutUnit logicalHeight) { m_rect.setHeight(logicalHeight); }
@@ -187,7 +187,7 @@
 #if !ASSERT_DISABLED
     m_hasValidBaselineOffset = true;
 #endif
-    m_baselineOffset = { };
+    m_baselineOffset = 0_lu;
     m_baseline.reset();
 }
 
@@ -223,8 +223,8 @@
     m_hasValidAscent = true;
     m_hasValidDescent = true;
 #endif
-    m_ascent = { };
-    m_descent = { };
+    m_ascent = 0_lu;
+    m_descent = 0_lu;
 }
 
 inline LayoutUnit LineBox::Baseline::ascent() const
diff --git a/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp b/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp
index c84d1c1..4a32727 100644
--- a/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp
@@ -120,7 +120,7 @@
         // At this point the available width can very well be negative e.g. when some part of the continuous text content can not be broken into parts ->
         // <span style="word-break: keep-all">textcontentwithnobreak</span><span>textcontentwithyesbreak</span>
         // When the first span computes longer than the available space, by the time we get to the second span, the adjusted available space becomes negative.
-        auto adjustedAvailableWidth = std::max(LayoutUnit { }, availableWidth - runsWidth + run.logicalWidth);
+        auto adjustedAvailableWidth = std::max(0_lu, availableWidth - runsWidth + run.logicalWidth);
         if (auto leftSide = tryBreakingTextRun(run, adjustedAvailableWidth))
             return BreakingContext::PartialTrailingContent { i, leftSide->length, leftSide->logicalWidth, leftSide->needsHyphen };
         return { };
@@ -287,7 +287,7 @@
 {
     m_continousRuns.clear();
     m_trailingTrimmableContent.reset();
-    m_width = 0;
+    m_width = 0_lu;
 }
 
 void LineBreaker::Content::trim(unsigned newSize)
@@ -325,7 +325,7 @@
 void LineBreaker::Content::TrailingTrimmableContent::reset()
 {
     isFullyTrimmable = false;
-    width = { };
+    width = 0_lu;
 }
 
 
diff --git a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
index b61d1aa..2fe86bd 100644
--- a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
@@ -102,13 +102,13 @@
             ++m_expansionOpportunityCount;
         textContext.setExpansion({ expansionBehavior, { } });
     }
-    return { m_initialInlineRun,  Display::Rect { 0, m_initialInlineRun.logicalLeft(), m_initialInlineRun.logicalWidth() + m_expandedWidth, { } }, textContext, m_expansionOpportunityCount };
+    return { m_initialInlineRun,  Display::Rect { 0_lu, m_initialInlineRun.logicalLeft(), m_initialInlineRun.logicalWidth() + m_expandedWidth, 0_lu }, textContext, m_expansionOpportunityCount };
 }
 
 LineBuilder::Run::Run(const InlineItemRun& inlineItemRun)
     : m_layoutBox(&inlineItemRun.layoutBox())
     , m_type(inlineItemRun.type())
-    , m_logicalRect({ { }, inlineItemRun.logicalLeft(), inlineItemRun.logicalWidth(), { } })
+    , m_logicalRect({ 0_lu, inlineItemRun.logicalLeft(), inlineItemRun.logicalWidth(), 0_lu })
     , m_textContext(inlineItemRun.textContext())
     , m_isCollapsedToVisuallyEmpty(inlineItemRun.isCollapsedToZeroAdvanceWidth())
 {
@@ -177,7 +177,7 @@
     } else
         m_initialStrut = { };
 
-    auto lineRect = Display::Rect { constraints.logicalTopLeft, { }, initialLineHeight };
+    auto lineRect = Display::Rect { constraints.logicalTopLeft, 0_lu, initialLineHeight };
     auto baseline = LineBox::Baseline { initialBaselineOffset, initialLineHeight - initialBaselineOffset };
     m_lineBox = LineBox { lineRect, baseline, initialBaselineOffset };
     m_lineLogicalWidth = constraints.availableLogicalWidth;
@@ -221,7 +221,7 @@
         }
         if (isVisuallyEmpty()) {
             m_lineBox.resetBaseline();
-            m_lineBox.setLogicalHeight({ });
+            m_lineBox.setLogicalHeight(0_lu);
         }
         // Remove descent when all content is baseline aligned but none of them have descent.
         if (formattingContext().quirks().lineDescentNeedsCollapsing(runList)) {
@@ -273,7 +273,7 @@
                 logicalTop = baselineOffset() - run.logicalRect().height();
             break;
         case VerticalAlign::Top:
-            logicalTop = { };
+            logicalTop = 0_lu;
             break;
         case VerticalAlign::Bottom:
             logicalTop = logicalBottom() - run.logicalRect().height();
@@ -530,11 +530,11 @@
 void LineBuilder::appendLineBreak(const InlineItem& inlineItem)
 {
     if (inlineItem.isHardLineBreak())
-        return m_inlineItemRuns.append({ inlineItem, contentLogicalWidth(), { } });
+        return m_inlineItemRuns.append({ inlineItem, contentLogicalWidth(), 0_lu });
     // Soft line breaks (preserved new line characters) require inline text boxes for compatibility reasons.
     ASSERT(inlineItem.isSoftLineBreak());
     auto& softLineBreakItem = downcast<InlineSoftLineBreakItem>(inlineItem);
-    m_inlineItemRuns.append({ softLineBreakItem, contentLogicalWidth(), { }, Display::Run::TextContext { softLineBreakItem.position(), 1, softLineBreakItem.layoutBox().textContext()->content } });
+    m_inlineItemRuns.append({ softLineBreakItem, contentLogicalWidth(), 0_lu, Display::Run::TextContext { softLineBreakItem.position(), 1, softLineBreakItem.layoutBox().textContext()->content } });
 }
 
 void LineBuilder::adjustBaselineAndLineHeight(const Run& run)
@@ -598,7 +598,7 @@
                 // Non inline-block boxes sit on the baseline (including their bottom margin).
                 m_lineBox.setAscentIfGreater(marginBoxHeight);
                 // Ignore negative descent (yes, negative descent is a thing).
-                m_lineBox.setLogicalHeightIfGreater(marginBoxHeight + std::max(LayoutUnit(), baseline.descent()));
+                m_lineBox.setLogicalHeightIfGreater(marginBoxHeight + std::max(0_lu, baseline.descent()));
             }
             break;
         }
@@ -789,7 +789,7 @@
         return trimmedWidth;
     }
     ASSERT_NOT_REACHED();
-    return { };
+    return 0_lu;
 }
 
 LineBuilder::InlineItemRun::InlineItemRun(const InlineItem& inlineItem, LayoutUnit logicalLeft, LayoutUnit logicalWidth, WTF::Optional<Display::Run::TextContext> textContext)
@@ -815,14 +815,14 @@
 LayoutUnit LineBuilder::InlineItemRun::trailingLetterSpacing() const
 {
     if (!hasTrailingLetterSpacing())
-        return { };
+        return 0_lu;
     return LayoutUnit { style().letterSpacing() };
 }
 
 void LineBuilder::InlineItemRun::setCollapsesToZeroAdvanceWidth()
 {
     m_collapsedToZeroAdvanceWidth = true;
-    m_logicalWidth = { };
+    m_logicalWidth = 0_lu;
 }
 
 void LineBuilder::InlineItemRun::removeTrailingLetterSpacing()
diff --git a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.h b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.h
index 3897cd7..34baee4 100644
--- a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.h
+++ b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.h
@@ -237,7 +237,7 @@
 inline void LineBuilder::TrimmableContent::reset()
 {
     m_firstRunIndex = { };
-    m_width = { };
+    m_width = 0_lu;
     m_lastRunIsFullyTrimmable = false;
 }
 
diff --git a/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp b/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
index 3d451ab..931f5f3 100644
--- a/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
+++ b/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
@@ -38,7 +38,7 @@
 static LayoutUnit inlineItemWidth(const FormattingContext& formattingContext, const InlineItem& inlineItem, LayoutUnit contentLogicalLeft)
 {
     if (inlineItem.isLineBreak())
-        return { };
+        return 0_lu;
 
     if (is<InlineTextItem>(inlineItem)) {
         auto& inlineTextItem = downcast<InlineTextItem>(inlineItem);
diff --git a/Source/WebCore/layout/inlineformatting/text/TextUtil.h b/Source/WebCore/layout/inlineformatting/text/TextUtil.h
index e9d3691..06ec5a9 100644
--- a/Source/WebCore/layout/inlineformatting/text/TextUtil.h
+++ b/Source/WebCore/layout/inlineformatting/text/TextUtil.h
@@ -37,7 +37,7 @@
 
 class TextUtil {
 public:
-    static LayoutUnit width(const Box&, unsigned from, unsigned to, LayoutUnit contentLogicalLeft = { });
+    static LayoutUnit width(const Box&, unsigned from, unsigned to, LayoutUnit contentLogicalLeft = 0_lu);
     static Optional<unsigned> hyphenPositionBefore(const InlineItem&, unsigned from, unsigned length);
     struct SplitData {
         unsigned start { 0 };