<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[243555] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/243555">243555</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2019-03-27 11:56:05 -0700 (Wed, 27 Mar 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove the SVG tear off objects for SVGPathSeg, SVGPathSegList and SVGAnimatedPathSegList
https://bugs.webkit.org/show_bug.cgi?id=196085

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-03-27
Reviewed by Simon Fraser.

Source/WebCore:

The SVGPathSegList is similar to the other SVGLists, e.g. SVGNUmberList
and SVGPointList except in two things:

1. Its items can be different but they are derived from the same base
   class SVGPathSeg.

2. The SVGPathSeg items are only used for DOM. When drawing or animating
   we have to have an SVGPathByteStream and convert it to a Path. Converting
   an SVGPathByteStream to SVGPathSeg items and vice versa is expensive.
   Building a Path from an SVGPathByteStream is also expensive. So an extra
   care needs to be taken for when these conversions happen.

In addition to handling the SVGPathSeg items, SVGPathSegList will manage
the associated SVGPathByteStream and Path objects. SVGPathSegList will be
lazy in getting updated objects when a change happens. For example, when
the byte stream changes, SVGPathSegList will clear its items and nullify
the Path object. But it will not build any of them until they are explicitly
requested.

Like what was done for other SVG properties when removing their tear off
objects, a new accessor, a new animator and a new animation function will
be added for the SVGAnimatedPathSegList.

All the header files of the concrete classes of SVGPathSeg will be removed
because they are small structures which hold some data items and they provide
setters and getters for these items. Here is the new file structures and
their contents:

-- SVGPathSeg.h still has the class SVGPathSeg which is now a superclass
   of SVGProperty.

-- SVGPathSegValue.h will have the template class SVGPathSegValue which
   holds an std::tuple of packed arguments. It provides setters and getters
   for these arguments. SVGPathSegValue.h will also have specialized
   classed derived from SVGPathSegValue and hold different arguments.

-- SVGPathSegImpl.h will have the final concrete SVGPathSeg classes.

Note SVGPathSeg concrete classes do not need to have a reference to the
the context SVGPathElement. SVGPathSeg will be owned by its SVGPathSegList
which will be owned by the SVGAnimatedPathSegList which will be owned by
the SVGPathElement.

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSSVGPathSegCustom.cpp:
* bindings/scripts/CodeGenerator.pm:
(IsSVGPathSegTypeName):
(IsSVGPathSegType):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):
* rendering/svg/SVGPathData.cpp:
(WebCore::pathFromPathElement):
* svg/SVGAnimatedPath.cpp: Removed.
* svg/SVGAnimatedPath.h: Removed.
* svg/SVGAnimatedType.h:
(WebCore::SVGAnimatedType::type const):
* svg/SVGAnimatorFactory.h:
(WebCore::SVGAnimatorFactory::create):
* svg/SVGPathByteStream.h:
(WebCore::SVGPathByteStream::SVGPathByteStream):
This constructor is used by SVGAnimationPathSegListFunction to convert
the 'form', 'to' and 'toAtEndOfDuration' strings to SVGPathByteStreams.

(WebCore::SVGPathByteStream::resize): Deleted.
(WebCore::SVGPropertyTraits<SVGPathByteStream>::initialValue): Deleted.
(WebCore::SVGPropertyTraits<SVGPathByteStream>::fromString): Deleted.
(WebCore::SVGPropertyTraits<SVGPathByteStream>::parse): Deleted.
(WebCore::SVGPropertyTraits<SVGPathByteStream>::toString): Deleted.
* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::SVGPathElement):
(WebCore::SVGPathElement::parseAttribute):
(WebCore::SVGPathElement::svgAttributeChanged):
(WebCore::SVGPathElement::getTotalLength const):
(WebCore::SVGPathElement::getPointAtLength const):
(WebCore::SVGPathElement::getPathSegAtLength const):
(WebCore::SVGPathElement::createSVGPathSegClosePath): Deleted.
(WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegMovetoRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegLinetoRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegArcAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegArcRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Deleted.
(WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Deleted.
The SVGPathSeg creation functions are moved to the header file.

(WebCore::SVGPathElement::registerAttributes): Deleted.
(WebCore::SVGPathElement::pathByteStream const): Deleted.
(WebCore::SVGPathElement::pathForByteStream const): Deleted.
(WebCore::SVGPathElement::lookupOrCreateDWrapper): Deleted.
(WebCore::SVGPathElement::animatedPropertyWillBeDeleted): Deleted.
(WebCore::SVGPathElement::pathSegList): Deleted.
(WebCore::SVGPathElement::normalizedPathSegList): Deleted.
(WebCore::SVGPathElement::animatedPathSegList): Deleted.
(WebCore::SVGPathElement::animatedNormalizedPathSegList): Deleted.
(WebCore::SVGPathElement::approximateMemoryCost const): Deleted.
(WebCore::SVGPathElement::pathSegListChanged): Deleted.
Managing the SVGPathByteStream and the drawing Path objects will be the
responsibility of SVGPathSegList.

* svg/SVGPathElement.h:
* svg/SVGPathSeg.h:
* svg/SVGPathSegArc.h: Removed.
* svg/SVGPathSegArcAbs.h: Removed.
* svg/SVGPathSegArcRel.h: Removed.
* svg/SVGPathSegClosePath.h: Removed.
* svg/SVGPathSegCurvetoCubic.h: Removed.
* svg/SVGPathSegCurvetoCubicAbs.h: Removed.
* svg/SVGPathSegCurvetoCubicRel.h: Removed.
* svg/SVGPathSegCurvetoCubicSmooth.h: Removed.
* svg/SVGPathSegCurvetoCubicSmoothAbs.h: Removed.
* svg/SVGPathSegCurvetoCubicSmoothRel.h: Removed.
* svg/SVGPathSegCurvetoQuadratic.h: Removed.
* svg/SVGPathSegCurvetoQuadraticAbs.h: Removed.
* svg/SVGPathSegCurvetoQuadraticRel.h: Removed.
* svg/SVGPathSegCurvetoQuadraticSmoothAbs.h: Removed.
* svg/SVGPathSegCurvetoQuadraticSmoothRel.h: Removed.
* svg/SVGPathSegImpl.h: Added.
* svg/SVGPathSegLinetoAbs.h: Removed.
* svg/SVGPathSegLinetoHorizontal.h: Removed.
* svg/SVGPathSegLinetoHorizontalAbs.h: Removed.
* svg/SVGPathSegLinetoHorizontalRel.h: Removed.
* svg/SVGPathSegLinetoRel.h: Removed.
* svg/SVGPathSegLinetoVertical.h: Removed.
* svg/SVGPathSegLinetoVerticalAbs.h: Removed.
* svg/SVGPathSegLinetoVerticalRel.h: Removed.
The definition of these classes are now in SVGPathSegImpl.h.

* svg/SVGPathSegList.cpp: Removed.
* svg/SVGPathSegList.h:
* svg/SVGPathSegListBuilder.cpp:
(WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
(WebCore::SVGPathSegListBuilder::moveTo):
(WebCore::SVGPathSegListBuilder::lineTo):
(WebCore::SVGPathSegListBuilder::lineToHorizontal):
(WebCore::SVGPathSegListBuilder::lineToVertical):
(WebCore::SVGPathSegListBuilder::curveToCubic):
(WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
(WebCore::SVGPathSegListBuilder::curveToQuadratic):
(WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
(WebCore::SVGPathSegListBuilder::arcTo):
(WebCore::SVGPathSegListBuilder::closePath):
* svg/SVGPathSegListBuilder.h:
The concrete SVGPathSeg classes can now create instances of their classes
without having to go through the SVGPathElement.

* svg/SVGPathSegListSource.cpp:
(WebCore::SVGPathSegListSource::SVGPathSegListSource):
* svg/SVGPathSegListSource.h:
* svg/SVGPathSegListValues.cpp: Removed.
* svg/SVGPathSegListValues.h: Removed.
* svg/SVGPathSegMovetoAbs.h: Removed.
* svg/SVGPathSegMovetoRel.h: Removed.
* svg/SVGPathSegValue.h: Added.
(WebCore::SVGPathSegValue::create):
(WebCore::SVGPathSegValue::clone const):
(WebCore::SVGPathSegValue::SVGPathSegValue):
(WebCore::SVGPathSegValue::argument const):
(WebCore::SVGPathSegValue::setArgument):
(WebCore::SVGPathSegLinetoHorizontal::x const):
(WebCore::SVGPathSegLinetoHorizontal::setX):
(WebCore::SVGPathSegLinetoVertical::y const):
(WebCore::SVGPathSegLinetoVertical::setY):
(WebCore::SVGPathSegSingleCoordinate::x const):
(WebCore::SVGPathSegSingleCoordinate::setX):
(WebCore::SVGPathSegSingleCoordinate::y const):
(WebCore::SVGPathSegSingleCoordinate::setY):
(WebCore::SVGPathSegCurvetoQuadratic::x const):
(WebCore::SVGPathSegCurvetoQuadratic::setX):
(WebCore::SVGPathSegCurvetoQuadratic::y const):
(WebCore::SVGPathSegCurvetoQuadratic::setY):
(WebCore::SVGPathSegCurvetoQuadratic::x1 const):
(WebCore::SVGPathSegCurvetoQuadratic::setX1):
(WebCore::SVGPathSegCurvetoQuadratic::y1 const):
(WebCore::SVGPathSegCurvetoQuadratic::setY1):
(WebCore::SVGPathSegCurvetoCubicSmooth::x const):
(WebCore::SVGPathSegCurvetoCubicSmooth::setX):
(WebCore::SVGPathSegCurvetoCubicSmooth::y const):
(WebCore::SVGPathSegCurvetoCubicSmooth::setY):
(WebCore::SVGPathSegCurvetoCubicSmooth::x2 const):
(WebCore::SVGPathSegCurvetoCubicSmooth::setX2):
(WebCore::SVGPathSegCurvetoCubicSmooth::y2 const):
(WebCore::SVGPathSegCurvetoCubicSmooth::setY2):
(WebCore::SVGPathSegCurvetoCubic::x const):
(WebCore::SVGPathSegCurvetoCubic::setX):
(WebCore::SVGPathSegCurvetoCubic::y const):
(WebCore::SVGPathSegCurvetoCubic::setY):
(WebCore::SVGPathSegCurvetoCubic::x1 const):
(WebCore::SVGPathSegCurvetoCubic::setX1):
(WebCore::SVGPathSegCurvetoCubic::y1 const):
(WebCore::SVGPathSegCurvetoCubic::setY1):
(WebCore::SVGPathSegCurvetoCubic::x2 const):
(WebCore::SVGPathSegCurvetoCubic::setX2):
(WebCore::SVGPathSegCurvetoCubic::y2 const):
(WebCore::SVGPathSegCurvetoCubic::setY2):
(WebCore::SVGPathSegArc::x const):
(WebCore::SVGPathSegArc::setX):
(WebCore::SVGPathSegArc::y const):
(WebCore::SVGPathSegArc::setY):
(WebCore::SVGPathSegArc::<a href="http://trac.webkit.org/projects/webkit/changeset/1">r1</a> const):
(WebCore::SVGPathSegArc::setR1):
(WebCore::SVGPathSegArc::<a href="http://trac.webkit.org/projects/webkit/changeset/2">r2</a> const):
(WebCore::SVGPathSegArc::setR2):
(WebCore::SVGPathSegArc::angle const):
(WebCore::SVGPathSegArc::setAngle):
(WebCore::SVGPathSegArc::largeArcFlag const):
(WebCore::SVGPathSegArc::setLargeArcFlag):
(WebCore::SVGPathSegArc::sweepFlag const):
(WebCore::SVGPathSegArc::setSweepFlag):
* svg/SVGPathSegWithContext.h: Removed.

* svg/SVGPathUtilities.cpp:
(WebCore::buildSVGPathByteStreamFromSVGPathSegList):
(WebCore::buildSVGPathSegListFromByteStream):
(WebCore::buildStringFromByteStream):
(WebCore::buildSVGPathByteStreamFromSVGPathSegListValues): Deleted.
(WebCore::appendSVGPathByteStreamFromSVGPathSeg): Deleted.
(WebCore::buildSVGPathSegListValuesFromByteStream): Deleted.
(WebCore::buildStringFromSVGPathSegListValues): Deleted.
* svg/SVGPathUtilities.h:
Since the class SVGPathSegListValues is removed, all the parsing functions
have now to deal with SVGPathSegList directly.

* svg/SVGPoint.h:
* svg/SVGValue.h:
* svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp: Removed.
* svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Removed.
* svg/properties/SVGAnimatedPropertyAccessorImpl.h:
* svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
* svg/properties/SVGAnimatedPropertyImpl.h:
(WebCore::SVGAnimatedPathSegList::create):
(WebCore::SVGAnimatedPathSegList::currentPathByteStream):
(WebCore::SVGAnimatedPathSegList::currentPath):
(WebCore::SVGAnimatedPathSegList::approximateMemoryCost const):
Provides an easy way to access the current SVGPathByteStream and Path
objects from the SVGAnimatedPathSegList.

* svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
(WebCore::SVGAnimationPathSegListFunction::progress):
* svg/properties/SVGPropertyOwnerRegistry.h:
(WebCore::SVGPropertyOwnerRegistry::registerProperty):

LayoutTests:

* svg/dom/SVGPathSegList-appendItem-expected.txt:
* svg/dom/SVGPathSegList-appendItem.xhtml:
* svg/dom/SVGPathSegList-clear-and-initialize-expected.txt:
* svg/dom/SVGPathSegList-clear-and-initialize.xhtml:
* svg/dom/SVGPathSegList-insertItemBefore-expected.txt:
* svg/dom/SVGPathSegList-insertItemBefore.xhtml:
* svg/dom/SVGPathSegList-replaceItem-expected.txt:
* svg/dom/SVGPathSegList-replaceItem.xhtml:
These changes are required because SVGPathSegList will be following the SVG2
specs regarding adding new items to the list.

See https://www.w3.org/TR/SVG/types.html#TermListInterface.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListappendItemexpectedtxt">trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListappendItemxhtml">trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListclearandinitializeexpectedtxt">trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListclearandinitializexhtml">trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListinsertItemBeforeexpectedtxt">trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListinsertItemBeforexhtml">trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListreplaceItemexpectedtxt">trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgdomSVGPathSegListreplaceItemxhtml">trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreSourcestxt">trunk/Source/WebCore/Sources.txt</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSSVGPathSegCustomcpp">trunk/Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGPathDatacpp">trunk/Source/WebCore/rendering/svg/SVGPathData.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTypeh">trunk/Source/WebCore/svg/SVGAnimatedType.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatorFactoryh">trunk/Source/WebCore/svg/SVGAnimatorFactory.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathByteStreamh">trunk/Source/WebCore/svg/SVGPathByteStream.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathElementcpp">trunk/Source/WebCore/svg/SVGPathElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathElementh">trunk/Source/WebCore/svg/SVGPathElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegh">trunk/Source/WebCore/svg/SVGPathSeg.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListh">trunk/Source/WebCore/svg/SVGPathSegList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListBuildercpp">trunk/Source/WebCore/svg/SVGPathSegListBuilder.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListBuilderh">trunk/Source/WebCore/svg/SVGPathSegListBuilder.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListSourcecpp">trunk/Source/WebCore/svg/SVGPathSegListSource.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListSourceh">trunk/Source/WebCore/svg/SVGPathSegListSource.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathUtilitiescpp">trunk/Source/WebCore/svg/SVGPathUtilities.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathUtilitiesh">trunk/Source/WebCore/svg/SVGPathUtilities.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGValueh">trunk/Source/WebCore/svg/SVGValue.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAccessorImplh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAccessorImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAnimatorImplh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyImplh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveValueFunctionImplh">trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPropertyOwnerRegistryh">trunk/Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGPathSegImplh">trunk/Source/WebCore/svg/SVGPathSegImpl.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegValueh">trunk/Source/WebCore/svg/SVGPathSegValue.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPathcpp">trunk/Source/WebCore/svg/SVGAnimatedPath.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPathh">trunk/Source/WebCore/svg/SVGAnimatedPath.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegArch">trunk/Source/WebCore/svg/SVGPathSegArc.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegArcAbsh">trunk/Source/WebCore/svg/SVGPathSegArcAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegArcRelh">trunk/Source/WebCore/svg/SVGPathSegArcRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegClosePathh">trunk/Source/WebCore/svg/SVGPathSegClosePath.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoCubich">trunk/Source/WebCore/svg/SVGPathSegCurvetoCubic.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoCubicAbsh">trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoCubicRelh">trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoCubicSmoothh">trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoCubicSmoothAbsh">trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoCubicSmoothRelh">trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoQuadratich">trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadratic.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticAbsh">trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticRelh">trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticSmoothAbsh">trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticSmoothRelh">trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoAbsh">trunk/Source/WebCore/svg/SVGPathSegLinetoAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoHorizontalh">trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontal.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoHorizontalAbsh">trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoHorizontalRelh">trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoRelh">trunk/Source/WebCore/svg/SVGPathSegLinetoRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoVerticalh">trunk/Source/WebCore/svg/SVGPathSegLinetoVertical.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoVerticalAbsh">trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegLinetoVerticalRelh">trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListcpp">trunk/Source/WebCore/svg/SVGPathSegList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListValuescpp">trunk/Source/WebCore/svg/SVGPathSegListValues.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListValuesh">trunk/Source/WebCore/svg/SVGPathSegListValues.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegMovetoAbsh">trunk/Source/WebCore/svg/SVGPathSegMovetoAbs.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegMovetoRelh">trunk/Source/WebCore/svg/SVGPathSegMovetoRel.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegWithContexth">trunk/Source/WebCore/svg/SVGPathSegWithContext.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPathSegListPropertyTearOffcpp">trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPathSegListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/ChangeLog 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2019-03-27  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        Remove the SVG tear off objects for SVGPathSeg, SVGPathSegList and SVGAnimatedPathSegList
+        https://bugs.webkit.org/show_bug.cgi?id=196085
+
+        Reviewed by Simon Fraser.
+
+        * svg/dom/SVGPathSegList-appendItem-expected.txt:
+        * svg/dom/SVGPathSegList-appendItem.xhtml:
+        * svg/dom/SVGPathSegList-clear-and-initialize-expected.txt:
+        * svg/dom/SVGPathSegList-clear-and-initialize.xhtml:
+        * svg/dom/SVGPathSegList-insertItemBefore-expected.txt:
+        * svg/dom/SVGPathSegList-insertItemBefore.xhtml:
+        * svg/dom/SVGPathSegList-replaceItem-expected.txt:
+        * svg/dom/SVGPathSegList-replaceItem.xhtml:
+        These changes are required because SVGPathSegList will be following the SVG2
+        specs regarding adding new items to the list. 
+
+        See https://www.w3.org/TR/SVG/types.html#TermListInterface.
+
</ins><span class="cx"> 2019-03-27  Shawn Roberts  <sroberts@apple.com>
</span><span class="cx"> 
</span><span class="cx">         http/tests/resourceLoadStatistics/website-data-removal-for-site-navigated-to-with-link-decoration.html is a flaky failure
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListappendItemexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -36,9 +36,11 @@
</span><span class="cx"> 
</span><span class="cx"> Swap segment four and five of path2 - now should look like a rectangle
</span><span class="cx"> PASS path2.pathSegList.appendItem(path2.pathSegList.getItem(3)).toString() is "[object SVGPathSegLinetoHorizontalRel]"
</span><ins>+PASS path2.pathSegList.removeItem(3).toString() is "[object SVGPathSegLinetoHorizontalRel]"
</ins><span class="cx"> 
</span><span class="cx"> Append second item from path2 to path1 list
</span><span class="cx"> PASS path1.pathSegList.appendItem(path2.pathSegList.getItem(1)).toString() is "[object SVGPathSegLinetoAbs]"
</span><ins>+PASS path2.pathSegList.removeItem(1).toString() is "[object SVGPathSegLinetoAbs]"
</ins><span class="cx"> 
</span><span class="cx"> Change last item of path1 list, that came from path2 list, assure it's updating path1
</span><span class="cx"> PASS path1.pathSegList.getItem(3).x -= 50 is 0
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListappendItemxhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -57,10 +57,12 @@
</span><span class="cx">     debug("")
</span><span class="cx">     debug("Swap segment four and five of path2 - now should look like a rectangle");
</span><span class="cx">     shouldBeEqualToString("path2.pathSegList.appendItem(path2.pathSegList.getItem(3)).toString()", "[object SVGPathSegLinetoHorizontalRel]");
</span><ins>+    shouldBeEqualToString("path2.pathSegList.removeItem(3).toString()", "[object SVGPathSegLinetoHorizontalRel]");
</ins><span class="cx"> 
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Append second item from path2 to path1 list");
</span><span class="cx">     shouldBeEqualToString("path1.pathSegList.appendItem(path2.pathSegList.getItem(1)).toString()", "[object SVGPathSegLinetoAbs]");
</span><ins>+    shouldBeEqualToString("path2.pathSegList.removeItem(1).toString()", "[object SVGPathSegLinetoAbs]");
</ins><span class="cx"> 
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Change last item of path1 list, that came from path2 list, assure it's updating path1");
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListclearandinitializeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -59,6 +59,7 @@
</span><span class="cx"> 
</span><span class="cx"> Initialize path1 list with first item of path2
</span><span class="cx"> PASS path1.pathSegList.initialize(path2.pathSegList.getItem(0)).toString() is "[object SVGPathSegMovetoAbs]"
</span><ins>+PASS path2.pathSegList.removeItem(0).toString() is "[object SVGPathSegMovetoAbs]"
</ins><span class="cx"> 
</span><span class="cx"> Check intermediate list state of path1
</span><span class="cx"> PASS path1.pathSegList.numberOfItems is 1
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListclearandinitializexhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -85,6 +85,7 @@
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Initialize path1 list with first item of path2");
</span><span class="cx">     shouldBeEqualToString("path1.pathSegList.initialize(path2.pathSegList.getItem(0)).toString()", "[object SVGPathSegMovetoAbs]");
</span><ins>+    shouldBeEqualToString("path2.pathSegList.removeItem(0).toString()", "[object SVGPathSegMovetoAbs]");
</ins><span class="cx"> 
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Check intermediate list state of path1");
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListinsertItemBeforeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -21,6 +21,7 @@
</span><span class="cx"> 
</span><span class="cx"> Insert fourth item at position three using insertItemBefore()
</span><span class="cx"> PASS path1.pathSegList.insertItemBefore(path1.pathSegList.getItem(3), 2).toString() is "[object SVGPathSegLinetoAbs]"
</span><ins>+PASS path1.pathSegList.removeItem(4).toString() is "[object SVGPathSegLinetoAbs]"
</ins><span class="cx"> 
</span><span class="cx"> Check final 'pathSegList' value of path1
</span><span class="cx"> PASS path1.pathSegList.numberOfItems is 4
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListinsertItemBeforexhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml  2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml     2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Insert fourth item at position three using insertItemBefore()");
</span><span class="cx">     shouldBeEqualToString("path1.pathSegList.insertItemBefore(path1.pathSegList.getItem(3), 2).toString()", "[object SVGPathSegLinetoAbs]");
</span><ins>+    shouldBeEqualToString("path1.pathSegList.removeItem(4).toString()", "[object SVGPathSegLinetoAbs]");
</ins><span class="cx"> 
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Check final 'pathSegList' value of path1");
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListreplaceItemexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -39,9 +39,11 @@
</span><span class="cx"> 
</span><span class="cx"> Replace second item with third item of path1
</span><span class="cx"> PASS path1.pathSegList.replaceItem(path1.pathSegList.getItem(2), 1).toString() is "[object SVGPathSegLinetoAbs]"
</span><ins>+PASS path1.pathSegList.removeItem(2).toString() is "[object SVGPathSegLinetoAbs]"
</ins><span class="cx"> 
</span><span class="cx"> Replace third item of path2 with fourth item of path1
</span><span class="cx"> PASS path2.pathSegList.replaceItem(path1.pathSegList.getItem(3), 2).toString() is "[object SVGPathSegLinetoVerticalRel]"
</span><ins>+PASS path1.pathSegList.removeItem(3).toString() is "[object SVGPathSegLinetoVerticalRel]"
</ins><span class="cx"> 
</span><span class="cx"> Check final 'pathSegList' value of path1
</span><span class="cx"> PASS path1.pathSegList.numberOfItems is 4
</span></span></pre></div>
<a id="trunkLayoutTestssvgdomSVGPathSegListreplaceItemxhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -59,10 +59,12 @@
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Replace second item with third item of path1");
</span><span class="cx">     shouldBeEqualToString("path1.pathSegList.replaceItem(path1.pathSegList.getItem(2), 1).toString()", "[object SVGPathSegLinetoAbs]");
</span><ins>+    shouldBeEqualToString("path1.pathSegList.removeItem(2).toString()", "[object SVGPathSegLinetoAbs]");
</ins><span class="cx"> 
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Replace third item of path2 with fourth item of path1");
</span><span class="cx">     shouldBeEqualToString("path2.pathSegList.replaceItem(path1.pathSegList.getItem(3), 2).toString()", "[object SVGPathSegLinetoVerticalRel]");
</span><ins>+    shouldBeEqualToString("path1.pathSegList.removeItem(3).toString()", "[object SVGPathSegLinetoVerticalRel]");
</ins><span class="cx"> 
</span><span class="cx">     debug("");
</span><span class="cx">     debug("Check final 'pathSegList' value of path1");
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/ChangeLog      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,3 +1,263 @@
</span><ins>+2019-03-27  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        Remove the SVG tear off objects for SVGPathSeg, SVGPathSegList and SVGAnimatedPathSegList
+        https://bugs.webkit.org/show_bug.cgi?id=196085
+
+        Reviewed by Simon Fraser.
+
+        The SVGPathSegList is similar to the other SVGLists, e.g. SVGNUmberList
+        and SVGPointList except in two things:
+
+        1. Its items can be different but they are derived from the same base 
+           class SVGPathSeg.
+
+        2. The SVGPathSeg items are only used for DOM. When drawing or animating
+           we have to have an SVGPathByteStream and convert it to a Path. Converting
+           an SVGPathByteStream to SVGPathSeg items and vice versa is expensive.
+           Building a Path from an SVGPathByteStream is also expensive. So an extra
+           care needs to be taken for when these conversions happen.
+
+        In addition to handling the SVGPathSeg items, SVGPathSegList will manage
+        the associated SVGPathByteStream and Path objects. SVGPathSegList will be
+        lazy in getting updated objects when a change happens. For example, when
+        the byte stream changes, SVGPathSegList will clear its items and nullify
+        the Path object. But it will not build any of them until they are explicitly
+        requested.
+
+        Like what was done for other SVG properties when removing their tear off
+        objects, a new accessor, a new animator and a new animation function will
+        be added for the SVGAnimatedPathSegList.
+
+        All the header files of the concrete classes of SVGPathSeg will be removed
+        because they are small structures which hold some data items and they provide
+        setters and getters for these items. Here is the new file structures and
+        their contents:
+
+        -- SVGPathSeg.h still has the class SVGPathSeg which is now a superclass
+           of SVGProperty. 
+
+        -- SVGPathSegValue.h will have the template class SVGPathSegValue which 
+           holds an std::tuple of packed arguments. It provides setters and getters
+           for these arguments. SVGPathSegValue.h will also have specialized 
+           classed derived from SVGPathSegValue and hold different arguments.
+
+        -- SVGPathSegImpl.h will have the final concrete SVGPathSeg classes.
+
+        Note SVGPathSeg concrete classes do not need to have a reference to the
+        the context SVGPathElement. SVGPathSeg will be owned by its SVGPathSegList
+        which will be owned by the SVGAnimatedPathSegList which will be owned by
+        the SVGPathElement.
+
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/JSSVGPathSegCustom.cpp:
+        * bindings/scripts/CodeGenerator.pm:
+        (IsSVGPathSegTypeName):
+        (IsSVGPathSegType):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+        * rendering/svg/SVGPathData.cpp:
+        (WebCore::pathFromPathElement):
+        * svg/SVGAnimatedPath.cpp: Removed.
+        * svg/SVGAnimatedPath.h: Removed.
+        * svg/SVGAnimatedType.h:
+        (WebCore::SVGAnimatedType::type const):
+        * svg/SVGAnimatorFactory.h:
+        (WebCore::SVGAnimatorFactory::create):
+        * svg/SVGPathByteStream.h:
+        (WebCore::SVGPathByteStream::SVGPathByteStream):
+        This constructor is used by SVGAnimationPathSegListFunction to convert
+        the 'form', 'to' and 'toAtEndOfDuration' strings to SVGPathByteStreams.
+
+        (WebCore::SVGPathByteStream::resize): Deleted.
+        (WebCore::SVGPropertyTraits<SVGPathByteStream>::initialValue): Deleted.
+        (WebCore::SVGPropertyTraits<SVGPathByteStream>::fromString): Deleted.
+        (WebCore::SVGPropertyTraits<SVGPathByteStream>::parse): Deleted.
+        (WebCore::SVGPropertyTraits<SVGPathByteStream>::toString): Deleted.
+        * svg/SVGPathElement.cpp:
+        (WebCore::SVGPathElement::SVGPathElement):
+        (WebCore::SVGPathElement::parseAttribute):
+        (WebCore::SVGPathElement::svgAttributeChanged):
+        (WebCore::SVGPathElement::getTotalLength const):
+        (WebCore::SVGPathElement::getPointAtLength const):
+        (WebCore::SVGPathElement::getPathSegAtLength const):
+        (WebCore::SVGPathElement::createSVGPathSegClosePath): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegMovetoRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegArcAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegArcRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Deleted.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Deleted.
+        The SVGPathSeg creation functions are moved to the header file.
+
+        (WebCore::SVGPathElement::registerAttributes): Deleted.
+        (WebCore::SVGPathElement::pathByteStream const): Deleted.
+        (WebCore::SVGPathElement::pathForByteStream const): Deleted.
+        (WebCore::SVGPathElement::lookupOrCreateDWrapper): Deleted.
+        (WebCore::SVGPathElement::animatedPropertyWillBeDeleted): Deleted.
+        (WebCore::SVGPathElement::pathSegList): Deleted.
+        (WebCore::SVGPathElement::normalizedPathSegList): Deleted.
+        (WebCore::SVGPathElement::animatedPathSegList): Deleted.
+        (WebCore::SVGPathElement::animatedNormalizedPathSegList): Deleted.
+        (WebCore::SVGPathElement::approximateMemoryCost const): Deleted.
+        (WebCore::SVGPathElement::pathSegListChanged): Deleted.
+        Managing the SVGPathByteStream and the drawing Path objects will be the
+        responsibility of SVGPathSegList.
+
+        * svg/SVGPathElement.h:
+        * svg/SVGPathSeg.h:
+        * svg/SVGPathSegArc.h: Removed.
+        * svg/SVGPathSegArcAbs.h: Removed.
+        * svg/SVGPathSegArcRel.h: Removed.
+        * svg/SVGPathSegClosePath.h: Removed.
+        * svg/SVGPathSegCurvetoCubic.h: Removed.
+        * svg/SVGPathSegCurvetoCubicAbs.h: Removed.
+        * svg/SVGPathSegCurvetoCubicRel.h: Removed.
+        * svg/SVGPathSegCurvetoCubicSmooth.h: Removed.
+        * svg/SVGPathSegCurvetoCubicSmoothAbs.h: Removed.
+        * svg/SVGPathSegCurvetoCubicSmoothRel.h: Removed.
+        * svg/SVGPathSegCurvetoQuadratic.h: Removed.
+        * svg/SVGPathSegCurvetoQuadraticAbs.h: Removed.
+        * svg/SVGPathSegCurvetoQuadraticRel.h: Removed.
+        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h: Removed.
+        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h: Removed.
+        * svg/SVGPathSegImpl.h: Added.
+        * svg/SVGPathSegLinetoAbs.h: Removed.
+        * svg/SVGPathSegLinetoHorizontal.h: Removed.
+        * svg/SVGPathSegLinetoHorizontalAbs.h: Removed.
+        * svg/SVGPathSegLinetoHorizontalRel.h: Removed.
+        * svg/SVGPathSegLinetoRel.h: Removed.
+        * svg/SVGPathSegLinetoVertical.h: Removed.
+        * svg/SVGPathSegLinetoVerticalAbs.h: Removed.
+        * svg/SVGPathSegLinetoVerticalRel.h: Removed.
+        The definition of these classes are now in SVGPathSegImpl.h.
+
+        * svg/SVGPathSegList.cpp: Removed.
+        * svg/SVGPathSegList.h:
+        * svg/SVGPathSegListBuilder.cpp:
+        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
+        (WebCore::SVGPathSegListBuilder::moveTo):
+        (WebCore::SVGPathSegListBuilder::lineTo):
+        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
+        (WebCore::SVGPathSegListBuilder::lineToVertical):
+        (WebCore::SVGPathSegListBuilder::curveToCubic):
+        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
+        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
+        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
+        (WebCore::SVGPathSegListBuilder::arcTo):
+        (WebCore::SVGPathSegListBuilder::closePath):        
+        * svg/SVGPathSegListBuilder.h:
+        The concrete SVGPathSeg classes can now create instances of their classes
+        without having to go through the SVGPathElement.
+
+        * svg/SVGPathSegListSource.cpp:
+        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
+        * svg/SVGPathSegListSource.h:
+        * svg/SVGPathSegListValues.cpp: Removed.
+        * svg/SVGPathSegListValues.h: Removed.
+        * svg/SVGPathSegMovetoAbs.h: Removed.
+        * svg/SVGPathSegMovetoRel.h: Removed.
+        * svg/SVGPathSegValue.h: Added.
+        (WebCore::SVGPathSegValue::create):
+        (WebCore::SVGPathSegValue::clone const):
+        (WebCore::SVGPathSegValue::SVGPathSegValue):
+        (WebCore::SVGPathSegValue::argument const):
+        (WebCore::SVGPathSegValue::setArgument):
+        (WebCore::SVGPathSegLinetoHorizontal::x const):
+        (WebCore::SVGPathSegLinetoHorizontal::setX):
+        (WebCore::SVGPathSegLinetoVertical::y const):
+        (WebCore::SVGPathSegLinetoVertical::setY):
+        (WebCore::SVGPathSegSingleCoordinate::x const):
+        (WebCore::SVGPathSegSingleCoordinate::setX):
+        (WebCore::SVGPathSegSingleCoordinate::y const):
+        (WebCore::SVGPathSegSingleCoordinate::setY):
+        (WebCore::SVGPathSegCurvetoQuadratic::x const):
+        (WebCore::SVGPathSegCurvetoQuadratic::setX):
+        (WebCore::SVGPathSegCurvetoQuadratic::y const):
+        (WebCore::SVGPathSegCurvetoQuadratic::setY):
+        (WebCore::SVGPathSegCurvetoQuadratic::x1 const):
+        (WebCore::SVGPathSegCurvetoQuadratic::setX1):
+        (WebCore::SVGPathSegCurvetoQuadratic::y1 const):
+        (WebCore::SVGPathSegCurvetoQuadratic::setY1):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::x const):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::setX):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::y const):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::setY):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::x2 const):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::setX2):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::y2 const):
+        (WebCore::SVGPathSegCurvetoCubicSmooth::setY2):
+        (WebCore::SVGPathSegCurvetoCubic::x const):
+        (WebCore::SVGPathSegCurvetoCubic::setX):
+        (WebCore::SVGPathSegCurvetoCubic::y const):
+        (WebCore::SVGPathSegCurvetoCubic::setY):
+        (WebCore::SVGPathSegCurvetoCubic::x1 const):
+        (WebCore::SVGPathSegCurvetoCubic::setX1):
+        (WebCore::SVGPathSegCurvetoCubic::y1 const):
+        (WebCore::SVGPathSegCurvetoCubic::setY1):
+        (WebCore::SVGPathSegCurvetoCubic::x2 const):
+        (WebCore::SVGPathSegCurvetoCubic::setX2):
+        (WebCore::SVGPathSegCurvetoCubic::y2 const):
+        (WebCore::SVGPathSegCurvetoCubic::setY2):
+        (WebCore::SVGPathSegArc::x const):
+        (WebCore::SVGPathSegArc::setX):
+        (WebCore::SVGPathSegArc::y const):
+        (WebCore::SVGPathSegArc::setY):
+        (WebCore::SVGPathSegArc::r1 const):
+        (WebCore::SVGPathSegArc::setR1):
+        (WebCore::SVGPathSegArc::r2 const):
+        (WebCore::SVGPathSegArc::setR2):
+        (WebCore::SVGPathSegArc::angle const):
+        (WebCore::SVGPathSegArc::setAngle):
+        (WebCore::SVGPathSegArc::largeArcFlag const):
+        (WebCore::SVGPathSegArc::setLargeArcFlag):
+        (WebCore::SVGPathSegArc::sweepFlag const):
+        (WebCore::SVGPathSegArc::setSweepFlag):
+        * svg/SVGPathSegWithContext.h: Removed.
+
+        * svg/SVGPathUtilities.cpp:
+        (WebCore::buildSVGPathByteStreamFromSVGPathSegList):
+        (WebCore::buildSVGPathSegListFromByteStream):
+        (WebCore::buildStringFromByteStream):
+        (WebCore::buildSVGPathByteStreamFromSVGPathSegListValues): Deleted.
+        (WebCore::appendSVGPathByteStreamFromSVGPathSeg): Deleted.
+        (WebCore::buildSVGPathSegListValuesFromByteStream): Deleted.
+        (WebCore::buildStringFromSVGPathSegListValues): Deleted.
+        * svg/SVGPathUtilities.h:
+        Since the class SVGPathSegListValues is removed, all the parsing functions
+        have now to deal with SVGPathSegList directly.
+
+        * svg/SVGPoint.h:
+        * svg/SVGValue.h:
+        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp: Removed.
+        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Removed.
+        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
+        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
+        * svg/properties/SVGAnimatedPropertyImpl.h:
+        (WebCore::SVGAnimatedPathSegList::create):
+        (WebCore::SVGAnimatedPathSegList::currentPathByteStream):
+        (WebCore::SVGAnimatedPathSegList::currentPath):
+        (WebCore::SVGAnimatedPathSegList::approximateMemoryCost const):
+        Provides an easy way to access the current SVGPathByteStream and Path
+        objects from the SVGAnimatedPathSegList.
+
+        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
+        (WebCore::SVGAnimationPathSegListFunction::progress):
+        * svg/properties/SVGPropertyOwnerRegistry.h:
+        (WebCore::SVGPropertyOwnerRegistry::registerProperty):
+
</ins><span class="cx"> 2019-03-27  Ryan Haddad  <ryanhaddad@apple.com>
</span><span class="cx"> 
</span><span class="cx">         AVAudioSessionRouteSharingPolicyLongForm has been deprecated
</span></span></pre></div>
<a id="trunkSourceWebCoreSourcestxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Sources.txt (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Sources.txt 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/Sources.txt    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -2267,7 +2267,6 @@
</span><span class="cx"> svg/SVGAnimateElementBase.cpp
</span><span class="cx"> svg/SVGAnimateMotionElement.cpp
</span><span class="cx"> svg/SVGAnimateTransformElement.cpp
</span><del>-svg/SVGAnimatedPath.cpp
</del><span class="cx"> svg/SVGAnimatedTransformList.cpp
</span><span class="cx"> svg/SVGAnimatedTypeAnimator.cpp
</span><span class="cx"> svg/SVGAnimationElement.cpp
</span><span class="lines">@@ -2348,10 +2347,8 @@
</span><span class="cx"> svg/SVGPathByteStreamSource.cpp
</span><span class="cx"> svg/SVGPathElement.cpp
</span><span class="cx"> svg/SVGPathParser.cpp
</span><del>-svg/SVGPathSegList.cpp
</del><span class="cx"> svg/SVGPathSegListBuilder.cpp
</span><span class="cx"> svg/SVGPathSegListSource.cpp
</span><del>-svg/SVGPathSegListValues.cpp
</del><span class="cx"> svg/SVGPathStringBuilder.cpp
</span><span class="cx"> svg/SVGPathStringSource.cpp
</span><span class="cx"> svg/SVGPathTraversalStateBuilder.cpp
</span><span class="lines">@@ -2405,7 +2402,6 @@
</span><span class="cx"> svg/graphics/filters/SVGFilter.cpp
</span><span class="cx"> svg/graphics/filters/SVGFilterBuilder.cpp
</span><span class="cx"> 
</span><del>-svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp
</del><span class="cx"> svg/properties/SVGAnimatedProperty.cpp
</span><span class="cx"> svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp
</span><span class="cx"> svg/properties/SVGAttributeAnimator.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -242,7 +242,6 @@
</span><span class="cx">          081AA8DA1111237E002AB06E /* SVGElementRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = 081AA8D91111237E002AB06E /* SVGElementRareData.h */; };
</span><span class="cx">          081EBF3B0FD34F4100DA7559 /* SVGFilterBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081EBF390FD34F4100DA7559 /* SVGFilterBuilder.h */; };
</span><span class="cx">          08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */ = {isa = PBXBuildFile; fileRef = 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */; };
</span><del>-               082DE42D1292621600D923DF /* SVGPathSegWithContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 082DE42C1292621600D923DF /* SVGPathSegWithContext.h */; };
</del><span class="cx">           083DAEA70F01A7FB00342754 /* RenderTextControlMultiLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */; };
</span><span class="cx">          083DAEA90F01A7FB00342754 /* RenderTextControlSingleLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 083DAEA50F01A7FB00342754 /* RenderTextControlSingleLine.h */; };
</span><span class="cx">          0845680812B90DA600960A9F /* FontMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = 0845680712B90DA600960A9F /* FontMetrics.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -257,7 +256,6 @@
</span><span class="cx">          0854B0251255E4E600B9CDD0 /* SVGTextQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0854B0131255E4E600B9CDD0 /* SVGTextQuery.h */; };
</span><span class="cx">          085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */; };
</span><span class="cx">          085B92BB0EFDE73D00E6123C /* FormDataBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 085B92B90EFDE73D00E6123C /* FormDataBuilder.h */; settings = {ATTRIBUTES = (); }; };
</span><del>-               0863951613B5FE5700BB344D /* SVGAnimatedPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 0863951413B5FE5700BB344D /* SVGAnimatedPath.h */; };
</del><span class="cx">           08641D4812142F7D008DE9F6 /* RenderImageResourceStyleImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 08641D4612142F7D008DE9F6 /* RenderImageResourceStyleImage.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          086BBD0F136039C2008B15D8 /* Glyph.h in Headers */ = {isa = PBXBuildFile; fileRef = 086BBD0E136039C2008B15D8 /* Glyph.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          0873B86B136064EA00A522C2 /* GlyphPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0873B86A136064EA00A522C2 /* GlyphPage.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -272,7 +270,6 @@
</span><span class="cx">          088A0E0C126EF1DB00978F7A /* SVGPropertyTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          088C2F7A12390081003D65CE /* SVGTextLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 088C2F7612390080003D65CE /* SVGTextLayoutAttributes.h */; };
</span><span class="cx">          089582560E857A7E00F82C83 /* ImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 089582540E857A7E00F82C83 /* ImageLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-               089A8E07128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 089A8E06128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h */; };
</del><span class="cx">           08A484780E5272C500C3FE76 /* ScriptElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A484760E5272C500C3FE76 /* ScriptElement.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          08C7A2C710DC7462002D368B /* SVGNames.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 656581E909D1508D000E61D7 /* SVGNames.h */; };
</span><span class="cx">          08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C925180FCC7C4A00480DEC /* FilterEffect.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -2468,24 +2465,6 @@
</span><span class="cx">          83B9687B19F8AB83004EF7AF /* StyleBuilderConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B9687919F8AB83004EF7AF /* StyleBuilderConverter.h */; };
</span><span class="cx">          83BB5C881D5D6F45005A71F4 /* AllDescendantsCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 83BB5C871D5D6F3A005A71F4 /* AllDescendantsCollection.h */; };
</span><span class="cx">          83C05A5B1A686212007E5DEA /* StylePropertyShorthandFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C05A591A686212007E5DEA /* StylePropertyShorthandFunctions.h */; };
</span><del>-               83C1D425178D5AB400141E68 /* SVGPathSegArcAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */; };
-               83C1D426178D5AB400141E68 /* SVGPathSegArcRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D414178D5AB400141E68 /* SVGPathSegArcRel.h */; };
-               83C1D427178D5AB400141E68 /* SVGPathSegCurvetoCubicAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D415178D5AB400141E68 /* SVGPathSegCurvetoCubicAbs.h */; };
-               83C1D428178D5AB400141E68 /* SVGPathSegCurvetoCubicRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D416178D5AB400141E68 /* SVGPathSegCurvetoCubicRel.h */; };
-               83C1D429178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D417178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h */; };
-               83C1D42A178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D418178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h */; };
-               83C1D42B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D419178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h */; };
-               83C1D42C178D5AB500141E68 /* SVGPathSegCurvetoQuadraticRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D41A178D5AB400141E68 /* SVGPathSegCurvetoQuadraticRel.h */; };
-               83C1D42D178D5AB500141E68 /* SVGPathSegCurvetoQuadraticSmoothAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D41B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticSmoothAbs.h */; };
-               83C1D42E178D5AB500141E68 /* SVGPathSegCurvetoQuadraticSmoothRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D41C178D5AB400141E68 /* SVGPathSegCurvetoQuadraticSmoothRel.h */; };
-               83C1D42F178D5AB500141E68 /* SVGPathSegLinetoAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D41D178D5AB400141E68 /* SVGPathSegLinetoAbs.h */; };
-               83C1D430178D5AB500141E68 /* SVGPathSegLinetoHorizontalAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D41E178D5AB400141E68 /* SVGPathSegLinetoHorizontalAbs.h */; };
-               83C1D431178D5AB500141E68 /* SVGPathSegLinetoHorizontalRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D41F178D5AB400141E68 /* SVGPathSegLinetoHorizontalRel.h */; };
-               83C1D432178D5AB500141E68 /* SVGPathSegLinetoRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D420178D5AB400141E68 /* SVGPathSegLinetoRel.h */; };
-               83C1D433178D5AB500141E68 /* SVGPathSegLinetoVerticalAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D421178D5AB400141E68 /* SVGPathSegLinetoVerticalAbs.h */; };
-               83C1D434178D5AB500141E68 /* SVGPathSegLinetoVerticalRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D422178D5AB400141E68 /* SVGPathSegLinetoVerticalRel.h */; };
-               83C1D435178D5AB500141E68 /* SVGPathSegMovetoAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D423178D5AB400141E68 /* SVGPathSegMovetoAbs.h */; };
-               83C1D436178D5AB500141E68 /* SVGPathSegMovetoRel.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D424178D5AB400141E68 /* SVGPathSegMovetoRel.h */; };
</del><span class="cx">           83C1F5941EDF69D300410D27 /* QualifiedNameCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1F5921EDF69D300410D27 /* QualifiedNameCache.h */; };
</span><span class="cx">          83C45B8E1DC2B68A008871BA /* ValidationBubble.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C45B8D1DC2B67C008871BA /* ValidationBubble.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          83C5795D1DA5C301006F9C86 /* ScrollLogicalPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = 8350C3E71DA59B6200355424 /* ScrollLogicalPosition.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -3511,13 +3490,6 @@
</span><span class="cx">          B2227A570D00BF220071B782 /* SVGParserUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C10D00BF200071B782 /* SVGParserUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          B2227A590D00BF220071B782 /* SVGPathElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C30D00BF200071B782 /* SVGPathElement.h */; };
</span><span class="cx">          B2227A5B0D00BF220071B782 /* SVGPathSeg.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C50D00BF200071B782 /* SVGPathSeg.h */; };
</span><del>-               B2227A5E0D00BF220071B782 /* SVGPathSegArc.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C80D00BF200071B782 /* SVGPathSegArc.h */; };
-               B2227A620D00BF220071B782 /* SVGPathSegClosePath.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278CC0D00BF200071B782 /* SVGPathSegClosePath.h */; };
-               B2227A650D00BF220071B782 /* SVGPathSegCurvetoCubic.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278CF0D00BF200071B782 /* SVGPathSegCurvetoCubic.h */; };
-               B2227A690D00BF220071B782 /* SVGPathSegCurvetoCubicSmooth.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278D30D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.h */; };
-               B2227A6D0D00BF220071B782 /* SVGPathSegCurvetoQuadratic.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278D70D00BF200071B782 /* SVGPathSegCurvetoQuadratic.h */; };
-               B2227A780D00BF220071B782 /* SVGPathSegLinetoHorizontal.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278E20D00BF200071B782 /* SVGPathSegLinetoHorizontal.h */; };
-               B2227A7D0D00BF220071B782 /* SVGPathSegLinetoVertical.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278E70D00BF200071B782 /* SVGPathSegLinetoVertical.h */; };
</del><span class="cx">           B2227A810D00BF220071B782 /* SVGPathSegList.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278EB0D00BF200071B782 /* SVGPathSegList.h */; };
</span><span class="cx">          B2227A880D00BF220071B782 /* SVGPatternElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278F20D00BF210071B782 /* SVGPatternElement.h */; };
</span><span class="cx">          B2227A8C0D00BF220071B782 /* SVGPointList.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278F60D00BF210071B782 /* SVGPointList.h */; };
</span><span class="lines">@@ -5592,7 +5564,6 @@
</span><span class="cx">          081EBF380FD34F4100DA7559 /* SVGFilterBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFilterBuilder.cpp; sourceTree = "<group>"; };
</span><span class="cx">          081EBF390FD34F4100DA7559 /* SVGFilterBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGFilterBuilder.h; sourceTree = "<group>"; };
</span><span class="cx">          08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformList.h; sourceTree = "<group>"; };
</span><del>-               082DE42C1292621600D923DF /* SVGPathSegWithContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegWithContext.h; sourceTree = "<group>"; };
</del><span class="cx">           083DAEA20F01A7FB00342754 /* RenderTextControlMultiLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextControlMultiLine.cpp; sourceTree = "<group>"; };
</span><span class="cx">          083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTextControlMultiLine.h; sourceTree = "<group>"; };
</span><span class="cx">          083DAEA40F01A7FB00342754 /* RenderTextControlSingleLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextControlSingleLine.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -5618,8 +5589,6 @@
</span><span class="cx">          085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformListPropertyTearOff.h; sourceTree = "<group>"; };
</span><span class="cx">          085B92B80EFDE73D00E6123C /* FormDataBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormDataBuilder.cpp; sourceTree = "<group>"; };
</span><span class="cx">          085B92B90EFDE73D00E6123C /* FormDataBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormDataBuilder.h; sourceTree = "<group>"; };
</span><del>-               0863951313B5FE5700BB344D /* SVGAnimatedPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedPath.cpp; sourceTree = "<group>"; };
-               0863951413B5FE5700BB344D /* SVGAnimatedPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPath.h; sourceTree = "<group>"; };
</del><span class="cx">           08641D4512142F7D008DE9F6 /* RenderImageResourceStyleImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderImageResourceStyleImage.cpp; sourceTree = "<group>"; };
</span><span class="cx">          08641D4612142F7D008DE9F6 /* RenderImageResourceStyleImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderImageResourceStyleImage.h; sourceTree = "<group>"; };
</span><span class="cx">          086BBD0E136039C2008B15D8 /* Glyph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Glyph.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -5638,7 +5607,6 @@
</span><span class="cx">          088C2F7612390080003D65CE /* SVGTextLayoutAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutAttributes.h; sourceTree = "<group>"; };
</span><span class="cx">          089582530E857A7E00F82C83 /* ImageLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageLoader.cpp; sourceTree = "<group>"; };
</span><span class="cx">          089582540E857A7E00F82C83 /* ImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageLoader.h; sourceTree = "<group>"; };
</span><del>-               089A8E06128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPathSegListPropertyTearOff.h; sourceTree = "<group>"; };
</del><span class="cx">           08A484750E5272C500C3FE76 /* ScriptElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptElement.cpp; sourceTree = "<group>"; };
</span><span class="cx">          08A484760E5272C500C3FE76 /* ScriptElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptElement.h; sourceTree = "<group>"; };
</span><span class="cx">          08C925170FCC7C4A00480DEC /* FilterEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FilterEffect.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -8673,7 +8641,6 @@
</span><span class="cx">          55FA7FF4210FB688005AEFE7 /* SVGAttributeAccessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAttributeAccessor.h; sourceTree = "<group>"; };
</span><span class="cx">          55FA7FF6210FBE3E005AEFE7 /* SVGAttributeRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAttributeRegistry.h; sourceTree = "<group>"; };
</span><span class="cx">          55FA7FFA2110ECD7005AEFE7 /* SVGZoomAndPanType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGZoomAndPanType.h; sourceTree = "<group>"; };
</span><del>-               55FA7FFC2110F813005AEFE7 /* SVGAnimatedPathSegListPropertyTearOff.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedPathSegListPropertyTearOff.cpp; sourceTree = "<group>"; };
</del><span class="cx">           55FA7FFE21110E6E005AEFE7 /* SVGAnimatedPropertyType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertyType.h; sourceTree = "<group>"; };
</span><span class="cx">          570440571E53851600356601 /* CryptoAlgorithmAES_CFBMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoAlgorithmAES_CFBMac.cpp; sourceTree = "<group>"; };
</span><span class="cx">          570440591E53936200356601 /* JSAesCbcCfbParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAesCbcCfbParams.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -9520,6 +9487,7 @@
</span><span class="cx">          72FB238622497AD5007E5AC7 /* SVGValuePropertyAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGValuePropertyAnimator.h; sourceTree = "<group>"; };
</span><span class="cx">          72FB238722497B15007E5AC7 /* SVGValuePropertyListAnimatorImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGValuePropertyListAnimatorImpl.h; sourceTree = "<group>"; };
</span><span class="cx">          72FB238822497B15007E5AC7 /* SVGValuePropertyListAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGValuePropertyListAnimator.h; sourceTree = "<group>"; };
</span><ins>+               72FB2396224B07B9007E5AC7 /* SVGPathSegImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegImpl.h; sourceTree = "<group>"; };
</ins><span class="cx">           7553CFE6108F473F00EA281E /* TimelineRecordFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimelineRecordFactory.h; sourceTree = "<group>"; };
</span><span class="cx">          7553CFE7108F473F00EA281E /* TimelineRecordFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimelineRecordFactory.cpp; sourceTree = "<group>"; };
</span><span class="cx">          75793E800D0CE0B3007FC0AC /* MessageEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = MessageEvent.cpp; sourceTree = "<group>"; };
</span><span class="lines">@@ -9720,13 +9688,8 @@
</span><span class="cx">          7C330A051DF9F95100D3395C /* JSPositionOptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPositionOptions.cpp; sourceTree = "<group>"; };
</span><span class="cx">          7C330A061DF9F95100D3395C /* JSPositionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPositionOptions.h; sourceTree = "<group>"; };
</span><span class="cx">          7C33F3601B4A050400502CAF /* JSDocumentFragmentCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDocumentFragmentCustom.cpp; sourceTree = "<group>"; };
</span><del>-               7C39C3621DDA864900FEFB29 /* SVGLengthListValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLengthListValues.cpp; sourceTree = "<group>"; };
-               7C39C3631DDA864900FEFB29 /* SVGLengthListValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGLengthListValues.h; sourceTree = "<group>"; };
</del><span class="cx">           7C39C36C1DDB8BB000FEFB29 /* SVGTransformListValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTransformListValues.cpp; sourceTree = "<group>"; };
</span><span class="cx">          7C39C36D1DDB8BB000FEFB29 /* SVGTransformListValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTransformListValues.h; sourceTree = "<group>"; };
</span><del>-               7C39C36E1DDBA3E000FEFB29 /* SVGPathSegListValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegListValues.cpp; sourceTree = "<group>"; };
-               7C39C36F1DDBA3E000FEFB29 /* SVGPathSegListValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegListValues.h; sourceTree = "<group>"; };
-               7C39C3701DDBA44000FEFB29 /* SVGPathSegList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegList.cpp; sourceTree = "<group>"; };
</del><span class="cx">           7C3A91E51C963B8800D1A7E3 /* ClipboardAccessPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClipboardAccessPolicy.h; sourceTree = "<group>"; };
</span><span class="cx">          7C3B796F1908757B00B47A2D /* UserMessageHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMessageHandler.cpp; sourceTree = "<group>"; };
</span><span class="cx">          7C3B79701908757B00B47A2D /* UserMessageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMessageHandler.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -10204,24 +10167,6 @@
</span><span class="cx">          83BB5C871D5D6F3A005A71F4 /* AllDescendantsCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllDescendantsCollection.h; sourceTree = "<group>"; };
</span><span class="cx">          83C05A581A686212007E5DEA /* StylePropertyShorthandFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StylePropertyShorthandFunctions.cpp; path = DerivedSources/WebCore/StylePropertyShorthandFunctions.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">          83C05A591A686212007E5DEA /* StylePropertyShorthandFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StylePropertyShorthandFunctions.h; path = DerivedSources/WebCore/StylePropertyShorthandFunctions.h; sourceTree = BUILT_PRODUCTS_DIR; };
</span><del>-               83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegArcAbs.h; sourceTree = "<group>"; };
-               83C1D414178D5AB400141E68 /* SVGPathSegArcRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegArcRel.h; sourceTree = "<group>"; };
-               83C1D415178D5AB400141E68 /* SVGPathSegCurvetoCubicAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubicAbs.h; sourceTree = "<group>"; };
-               83C1D416178D5AB400141E68 /* SVGPathSegCurvetoCubicRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubicRel.h; sourceTree = "<group>"; };
-               83C1D417178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubicSmoothAbs.h; sourceTree = "<group>"; };
-               83C1D418178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubicSmoothRel.h; sourceTree = "<group>"; };
-               83C1D419178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadraticAbs.h; sourceTree = "<group>"; };
-               83C1D41A178D5AB400141E68 /* SVGPathSegCurvetoQuadraticRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadraticRel.h; sourceTree = "<group>"; };
-               83C1D41B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticSmoothAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadraticSmoothAbs.h; sourceTree = "<group>"; };
-               83C1D41C178D5AB400141E68 /* SVGPathSegCurvetoQuadraticSmoothRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadraticSmoothRel.h; sourceTree = "<group>"; };
-               83C1D41D178D5AB400141E68 /* SVGPathSegLinetoAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoAbs.h; sourceTree = "<group>"; };
-               83C1D41E178D5AB400141E68 /* SVGPathSegLinetoHorizontalAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoHorizontalAbs.h; sourceTree = "<group>"; };
-               83C1D41F178D5AB400141E68 /* SVGPathSegLinetoHorizontalRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoHorizontalRel.h; sourceTree = "<group>"; };
-               83C1D420178D5AB400141E68 /* SVGPathSegLinetoRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoRel.h; sourceTree = "<group>"; };
-               83C1D421178D5AB400141E68 /* SVGPathSegLinetoVerticalAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoVerticalAbs.h; sourceTree = "<group>"; };
-               83C1D422178D5AB400141E68 /* SVGPathSegLinetoVerticalRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoVerticalRel.h; sourceTree = "<group>"; };
-               83C1D423178D5AB400141E68 /* SVGPathSegMovetoAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegMovetoAbs.h; sourceTree = "<group>"; };
-               83C1D424178D5AB400141E68 /* SVGPathSegMovetoRel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegMovetoRel.h; sourceTree = "<group>"; };
</del><span class="cx">           83C1F5911EDF69D300410D27 /* QualifiedNameCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QualifiedNameCache.cpp; sourceTree = "<group>"; };
</span><span class="cx">          83C1F5921EDF69D300410D27 /* QualifiedNameCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QualifiedNameCache.h; sourceTree = "<group>"; };
</span><span class="cx">          83C45B8B1DC2B663008871BA /* ValidationBubbleMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ValidationBubbleMac.mm; sourceTree = "<group>"; };
</span><span class="lines">@@ -12368,28 +12313,21 @@
</span><span class="cx">          B22278C40D00BF200071B782 /* SVGPathElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathElement.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278C50D00BF200071B782 /* SVGPathSeg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSeg.h; sourceTree = "<group>"; };
</span><span class="cx">          B22278C60D00BF200071B782 /* SVGPathSeg.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSeg.idl; sourceTree = "<group>"; };
</span><del>-               B22278C80D00BF200071B782 /* SVGPathSegArc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegArc.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278C90D00BF200071B782 /* SVGPathSegArcAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegArcAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278CA0D00BF200071B782 /* SVGPathSegArcRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegArcRel.idl; sourceTree = "<group>"; };
</span><del>-               B22278CC0D00BF200071B782 /* SVGPathSegClosePath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegClosePath.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278CD0D00BF200071B782 /* SVGPathSegClosePath.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegClosePath.idl; sourceTree = "<group>"; };
</span><del>-               B22278CF0D00BF200071B782 /* SVGPathSegCurvetoCubic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubic.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278D00D00BF200071B782 /* SVGPathSegCurvetoCubicAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278D10D00BF200071B782 /* SVGPathSegCurvetoCubicRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicRel.idl; sourceTree = "<group>"; };
</span><del>-               B22278D30D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubicSmooth.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278D40D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicSmoothAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278D50D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicSmoothRel.idl; sourceTree = "<group>"; };
</span><del>-               B22278D70D00BF200071B782 /* SVGPathSegCurvetoQuadratic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadratic.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278D80D00BF200071B782 /* SVGPathSegCurvetoQuadraticAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278D90D00BF200071B782 /* SVGPathSegCurvetoQuadraticRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticRel.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278DC0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticSmoothAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278DD0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticSmoothRel.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278E00D00BF200071B782 /* SVGPathSegLinetoAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoAbs.idl; sourceTree = "<group>"; };
</span><del>-               B22278E20D00BF200071B782 /* SVGPathSegLinetoHorizontal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoHorizontal.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278E30D00BF200071B782 /* SVGPathSegLinetoHorizontalAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoHorizontalAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278E40D00BF200071B782 /* SVGPathSegLinetoHorizontalRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoHorizontalRel.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278E50D00BF200071B782 /* SVGPathSegLinetoRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoRel.idl; sourceTree = "<group>"; };
</span><del>-               B22278E70D00BF200071B782 /* SVGPathSegLinetoVertical.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoVertical.h; sourceTree = "<group>"; };
</del><span class="cx">           B22278E80D00BF200071B782 /* SVGPathSegLinetoVerticalAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoVerticalAbs.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278E90D00BF200071B782 /* SVGPathSegLinetoVerticalRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoVerticalRel.idl; sourceTree = "<group>"; };
</span><span class="cx">          B22278EB0D00BF200071B782 /* SVGPathSegList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegList.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -16192,8 +16130,6 @@
</span><span class="cx">                  children = (
</span><span class="cx">                          5553592022441A16008F5EC9 /* SVGAnimatedDecoratedProperty.h */,
</span><span class="cx">                          088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */,
</span><del>-                               55FA7FFC2110F813005AEFE7 /* SVGAnimatedPathSegListPropertyTearOff.cpp */,
-                               089A8E06128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h */,
</del><span class="cx">                           55EE5357223B29F800FBA944 /* SVGAnimatedPrimitiveProperty.h */,
</span><span class="cx">                          55BE025D223B29C40032F08A /* SVGAnimatedProperty.cpp */,
</span><span class="cx">                          55EE5362223B2A2300FBA944 /* SVGAnimatedProperty.h */,
</span><span class="lines">@@ -24124,16 +24060,10 @@
</span><span class="cx">                          B22277E70D00BF1F0071B782 /* SVGAnimatedBoolean.idl */,
</span><span class="cx">                          B22277E80D00BF1F0071B782 /* SVGAnimatedEnumeration.idl */,
</span><span class="cx">                          B22277E90D00BF1F0071B782 /* SVGAnimatedInteger.idl */,
</span><del>-                               4381763A13A697D4007D1187 /* SVGAnimatedLength.cpp */,
-                               089021A8126EF5DE0092D5EA /* SVGAnimatedLength.h */,
</del><span class="cx">                           B22277EA0D00BF1F0071B782 /* SVGAnimatedLength.idl */,
</span><del>-                               431A2FD613B7707A007791E4 /* SVGAnimatedLengthList.cpp */,
-                               089021AC126EF5E90092D5EA /* SVGAnimatedLengthList.h */,
</del><span class="cx">                           B22277EB0D00BF1F0071B782 /* SVGAnimatedLengthList.idl */,
</span><span class="cx">                          B22277EC0D00BF1F0071B782 /* SVGAnimatedNumber.idl */,
</span><span class="cx">                          B22277ED0D00BF1F0071B782 /* SVGAnimatedNumberList.idl */,
</span><del>-                               0863951313B5FE5700BB344D /* SVGAnimatedPath.cpp */,
-                               0863951413B5FE5700BB344D /* SVGAnimatedPath.h */,
</del><span class="cx">                           B22277F40D00BF1F0071B782 /* SVGAnimatedPreserveAspectRatio.idl */,
</span><span class="cx">                          B22277F50D00BF1F0071B782 /* SVGAnimatedRect.idl */,
</span><span class="cx">                          B22277F60D00BF1F0071B782 /* SVGAnimatedString.idl */,
</span><span class="lines">@@ -24392,47 +24322,24 @@
</span><span class="cx">                          8476C9EE11DF6A5800555B02 /* SVGPathParser.h */,
</span><span class="cx">                          B22278C50D00BF200071B782 /* SVGPathSeg.h */,
</span><span class="cx">                          B22278C60D00BF200071B782 /* SVGPathSeg.idl */,
</span><del>-                               B22278C80D00BF200071B782 /* SVGPathSegArc.h */,
-                               83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */,
</del><span class="cx">                           B22278C90D00BF200071B782 /* SVGPathSegArcAbs.idl */,
</span><del>-                               83C1D414178D5AB400141E68 /* SVGPathSegArcRel.h */,
</del><span class="cx">                           B22278CA0D00BF200071B782 /* SVGPathSegArcRel.idl */,
</span><del>-                               B22278CC0D00BF200071B782 /* SVGPathSegClosePath.h */,
</del><span class="cx">                           B22278CD0D00BF200071B782 /* SVGPathSegClosePath.idl */,
</span><del>-                               B22278CF0D00BF200071B782 /* SVGPathSegCurvetoCubic.h */,
-                               83C1D415178D5AB400141E68 /* SVGPathSegCurvetoCubicAbs.h */,
</del><span class="cx">                           B22278D00D00BF200071B782 /* SVGPathSegCurvetoCubicAbs.idl */,
</span><del>-                               83C1D416178D5AB400141E68 /* SVGPathSegCurvetoCubicRel.h */,
</del><span class="cx">                           B22278D10D00BF200071B782 /* SVGPathSegCurvetoCubicRel.idl */,
</span><del>-                               B22278D30D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.h */,
-                               83C1D417178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h */,
</del><span class="cx">                           B22278D40D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothAbs.idl */,
</span><del>-                               83C1D418178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h */,
</del><span class="cx">                           B22278D50D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothRel.idl */,
</span><del>-                               B22278D70D00BF200071B782 /* SVGPathSegCurvetoQuadratic.h */,
-                               83C1D419178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h */,
</del><span class="cx">                           B22278D80D00BF200071B782 /* SVGPathSegCurvetoQuadraticAbs.idl */,
</span><del>-                               83C1D41A178D5AB400141E68 /* SVGPathSegCurvetoQuadraticRel.h */,
</del><span class="cx">                           B22278D90D00BF200071B782 /* SVGPathSegCurvetoQuadraticRel.idl */,
</span><del>-                               83C1D41B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticSmoothAbs.h */,
</del><span class="cx">                           B22278DC0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothAbs.idl */,
</span><del>-                               83C1D41C178D5AB400141E68 /* SVGPathSegCurvetoQuadraticSmoothRel.h */,
</del><span class="cx">                           B22278DD0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothRel.idl */,
</span><del>-                               83C1D41D178D5AB400141E68 /* SVGPathSegLinetoAbs.h */,
</del><ins>+                                72FB2396224B07B9007E5AC7 /* SVGPathSegImpl.h */,
</ins><span class="cx">                           B22278E00D00BF200071B782 /* SVGPathSegLinetoAbs.idl */,
</span><del>-                               B22278E20D00BF200071B782 /* SVGPathSegLinetoHorizontal.h */,
-                               83C1D41E178D5AB400141E68 /* SVGPathSegLinetoHorizontalAbs.h */,
</del><span class="cx">                           B22278E30D00BF200071B782 /* SVGPathSegLinetoHorizontalAbs.idl */,
</span><del>-                               83C1D41F178D5AB400141E68 /* SVGPathSegLinetoHorizontalRel.h */,
</del><span class="cx">                           B22278E40D00BF200071B782 /* SVGPathSegLinetoHorizontalRel.idl */,
</span><del>-                               83C1D420178D5AB400141E68 /* SVGPathSegLinetoRel.h */,
</del><span class="cx">                           B22278E50D00BF200071B782 /* SVGPathSegLinetoRel.idl */,
</span><del>-                               B22278E70D00BF200071B782 /* SVGPathSegLinetoVertical.h */,
-                               83C1D421178D5AB400141E68 /* SVGPathSegLinetoVerticalAbs.h */,
</del><span class="cx">                           B22278E80D00BF200071B782 /* SVGPathSegLinetoVerticalAbs.idl */,
</span><del>-                               83C1D422178D5AB400141E68 /* SVGPathSegLinetoVerticalRel.h */,
</del><span class="cx">                           B22278E90D00BF200071B782 /* SVGPathSegLinetoVerticalRel.idl */,
</span><del>-                               7C39C3701DDBA44000FEFB29 /* SVGPathSegList.cpp */,
</del><span class="cx">                           B22278EB0D00BF200071B782 /* SVGPathSegList.h */,
</span><span class="cx">                          B22278EC0D00BF210071B782 /* SVGPathSegList.idl */,
</span><span class="cx">                          8476C9E311DF6A0B00555B02 /* SVGPathSegListBuilder.cpp */,
</span><span class="lines">@@ -24439,13 +24346,8 @@
</span><span class="cx">                          8476C9E411DF6A0B00555B02 /* SVGPathSegListBuilder.h */,
</span><span class="cx">                          84B6B975120F13E500B8EFAF /* SVGPathSegListSource.cpp */,
</span><span class="cx">                          84B6B976120F13E500B8EFAF /* SVGPathSegListSource.h */,
</span><del>-                               7C39C36E1DDBA3E000FEFB29 /* SVGPathSegListValues.cpp */,
-                               7C39C36F1DDBA3E000FEFB29 /* SVGPathSegListValues.h */,
-                               83C1D423178D5AB400141E68 /* SVGPathSegMovetoAbs.h */,
</del><span class="cx">                           B22278EF0D00BF210071B782 /* SVGPathSegMovetoAbs.idl */,
</span><del>-                               83C1D424178D5AB400141E68 /* SVGPathSegMovetoRel.h */,
</del><span class="cx">                           B22278F00D00BF210071B782 /* SVGPathSegMovetoRel.idl */,
</span><del>-                               082DE42C1292621600D923DF /* SVGPathSegWithContext.h */,
</del><span class="cx">                           84300BD7120C9AD40021954A /* SVGPathSource.h */,
</span><span class="cx">                          8419D2B7120E0C7600141F8F /* SVGPathStringBuilder.cpp */,
</span><span class="cx">                          8419D2B8120E0C7600141F8F /* SVGPathStringBuilder.h */,
</span><span class="lines">@@ -31894,11 +31796,7 @@
</span><span class="cx">                          24D912B813CA9A6900D21915 /* SVGAltGlyphItemElement.h in Headers */,
</span><span class="cx">                          B22279770D00BF220071B782 /* SVGAngle.h in Headers */,
</span><span class="cx">                          B222797A0D00BF220071B782 /* SVGAnimateColorElement.h in Headers */,
</span><del>-                               089021A9126EF5DE0092D5EA /* SVGAnimatedLength.h in Headers */,
-                               089021AD126EF5E90092D5EA /* SVGAnimatedLengthList.h in Headers */,
</del><span class="cx">                           088A0E04126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h in Headers */,
</span><del>-                               0863951613B5FE5700BB344D /* SVGAnimatedPath.h in Headers */,
-                               089A8E07128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h in Headers */,
</del><span class="cx">                           088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */,
</span><span class="cx">                          088A0E08126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h in Headers */,
</span><span class="cx">                          55FA7FFF21110E6E005AEFE7 /* SVGAnimatedPropertyType.h in Headers */,
</span><span class="lines">@@ -32017,35 +31915,9 @@
</span><span class="cx">                          B2227A590D00BF220071B782 /* SVGPathElement.h in Headers */,
</span><span class="cx">                          8476C9F011DF6A5800555B02 /* SVGPathParser.h in Headers */,
</span><span class="cx">                          B2227A5B0D00BF220071B782 /* SVGPathSeg.h in Headers */,
</span><del>-                               B2227A5E0D00BF220071B782 /* SVGPathSegArc.h in Headers */,
-                               83C1D425178D5AB400141E68 /* SVGPathSegArcAbs.h in Headers */,
-                               83C1D426178D5AB400141E68 /* SVGPathSegArcRel.h in Headers */,
-                               B2227A620D00BF220071B782 /* SVGPathSegClosePath.h in Headers */,
-                               B2227A650D00BF220071B782 /* SVGPathSegCurvetoCubic.h in Headers */,
-                               83C1D427178D5AB400141E68 /* SVGPathSegCurvetoCubicAbs.h in Headers */,
-                               83C1D428178D5AB400141E68 /* SVGPathSegCurvetoCubicRel.h in Headers */,
-                               B2227A690D00BF220071B782 /* SVGPathSegCurvetoCubicSmooth.h in Headers */,
-                               83C1D429178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothAbs.h in Headers */,
-                               83C1D42A178D5AB400141E68 /* SVGPathSegCurvetoCubicSmoothRel.h in Headers */,
-                               B2227A6D0D00BF220071B782 /* SVGPathSegCurvetoQuadratic.h in Headers */,
-                               83C1D42B178D5AB400141E68 /* SVGPathSegCurvetoQuadraticAbs.h in Headers */,
-                               83C1D42C178D5AB500141E68 /* SVGPathSegCurvetoQuadraticRel.h in Headers */,
-                               83C1D42D178D5AB500141E68 /* SVGPathSegCurvetoQuadraticSmoothAbs.h in Headers */,
-                               83C1D42E178D5AB500141E68 /* SVGPathSegCurvetoQuadraticSmoothRel.h in Headers */,
-                               83C1D42F178D5AB500141E68 /* SVGPathSegLinetoAbs.h in Headers */,
-                               B2227A780D00BF220071B782 /* SVGPathSegLinetoHorizontal.h in Headers */,
-                               83C1D430178D5AB500141E68 /* SVGPathSegLinetoHorizontalAbs.h in Headers */,
-                               83C1D431178D5AB500141E68 /* SVGPathSegLinetoHorizontalRel.h in Headers */,
-                               83C1D432178D5AB500141E68 /* SVGPathSegLinetoRel.h in Headers */,
-                               B2227A7D0D00BF220071B782 /* SVGPathSegLinetoVertical.h in Headers */,
-                               83C1D433178D5AB500141E68 /* SVGPathSegLinetoVerticalAbs.h in Headers */,
-                               83C1D434178D5AB500141E68 /* SVGPathSegLinetoVerticalRel.h in Headers */,
</del><span class="cx">                           B2227A810D00BF220071B782 /* SVGPathSegList.h in Headers */,
</span><span class="cx">                          8476C9E611DF6A0B00555B02 /* SVGPathSegListBuilder.h in Headers */,
</span><span class="cx">                          84B6B978120F13E500B8EFAF /* SVGPathSegListSource.h in Headers */,
</span><del>-                               83C1D435178D5AB500141E68 /* SVGPathSegMovetoAbs.h in Headers */,
-                               83C1D436178D5AB500141E68 /* SVGPathSegMovetoRel.h in Headers */,
-                               082DE42D1292621600D923DF /* SVGPathSegWithContext.h in Headers */,
</del><span class="cx">                           84300BD8120C9AD40021954A /* SVGPathSource.h in Headers */,
</span><span class="cx">                          8419D2BA120E0C7600141F8F /* SVGPathStringBuilder.h in Headers */,
</span><span class="cx">                          84300BD6120C9AAC0021954A /* SVGPathStringSource.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSSVGPathSegCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp  2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp     2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -41,21 +41,7 @@
</span><span class="cx"> #include "JSSVGPathSegMovetoAbs.h"
</span><span class="cx"> #include "JSSVGPathSegMovetoRel.h"
</span><span class="cx"> #include "SVGPathSeg.h"
</span><del>-#include "SVGPathSegArc.h"
-#include "SVGPathSegClosePath.h"
-#include "SVGPathSegCurvetoCubic.h"
-#include "SVGPathSegCurvetoCubicSmooth.h"
-#include "SVGPathSegCurvetoQuadratic.h"
-#include "SVGPathSegCurvetoQuadraticSmoothAbs.h"
-#include "SVGPathSegCurvetoQuadraticSmoothRel.h"
-#include "SVGPathSegLinetoAbs.h"
-#include "SVGPathSegLinetoHorizontal.h"
-#include "SVGPathSegLinetoRel.h"
-#include "SVGPathSegLinetoVertical.h"
-#include "SVGPathSegMovetoAbs.h"
-#include "SVGPathSegMovetoRel.h"
</del><span class="cx"> 
</span><del>-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> using namespace JSC;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -619,6 +619,22 @@
</span><span class="cx">     return $object->IsSVGAnimatedTypeName($type->name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub IsSVGPathSegTypeName
+{
+    my ($object, $typeName) = @_;
+
+    return $typeName =~ /^SVGPathSeg/;
+}
+
+sub IsSVGPathSegType
+{
+    my ($object, $type) = @_;
+
+    assert("Not a type") if ref($type) ne "IDLType";
+
+    return $object->IsSVGPathSegTypeName($type->name);
+}
+
</ins><span class="cx"> sub IsConstructorType
</span><span class="cx"> {
</span><span class="cx">     my ($object, $type) = @_;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -2522,6 +2522,8 @@
</span><span class="cx"> 
</span><span class="cx">     if ($codeGenerator->IsSVGAnimatedType($interface->type)) {
</span><span class="cx">         $headerIncludes{"SVGAnimatedPropertyImpl.h"} = 1;
</span><ins>+    } elsif ($codeGenerator->IsSVGPathSegType($interface->type)) {
+        $headerIncludes{"SVGPathSegImpl.h"} = 1;
</ins><span class="cx">     } else {
</span><span class="cx">         $headerIncludes{"$interfaceName.h"} = 1 if $hasParent && $interface->extendedAttributes->{JSGenerateToNativeObject};
</span><span class="cx">         # Implementation class forward declaration
</span><span class="lines">@@ -2573,7 +2575,7 @@
</span><span class="cx">         push(@headerContent, "        return ptr;\n");
</span><span class="cx">         push(@headerContent, "    }\n\n");  
</span><span class="cx">     } else {
</span><del>-        if (!$codeGenerator->IsSVGAnimatedType($interface->type)) {
</del><ins>+        if (!$codeGenerator->IsSVGAnimatedType($interface->type) && !$codeGenerator->IsSVGPathSegType($interface->type)) {
</ins><span class="cx">             AddIncludesForImplementationTypeInHeader($implType);
</span><span class="cx">         }
</span><span class="cx">         push(@headerContent, "    static $className* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref<$implType>&& impl)\n");
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGPathDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGPathData.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGPathData.cpp       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/rendering/svg/SVGPathData.cpp  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> 
</span><span class="cx"> static Path pathFromPathElement(const SVGElement& element)
</span><span class="cx"> {
</span><del>-    return downcast<SVGPathElement>(element).pathForByteStream();
</del><ins>+    return downcast<SVGPathElement>(element).path();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static Path pathFromPolygonElement(const SVGElement& element)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPathcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAnimatedPath.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPath.cpp     2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGAnimatedPath.cpp        2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,148 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2011, 2012. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "SVGAnimatedPath.h"
-
-#include "SVGAnimateElementBase.h"
-#include "SVGAnimatedPathSegListPropertyTearOff.h"
-
-namespace WebCore {
-
-SVGAnimatedPathAnimator::SVGAnimatedPathAnimator(SVGAnimationElement* animationElement, SVGElement* contextElement)
-    : SVGAnimatedTypeAnimator(AnimatedPath, animationElement, contextElement)
-{
-}
-
-std::unique_ptr<SVGAnimatedType> SVGAnimatedPathAnimator::constructFromString(const String& string)
-{
-    return SVGAnimatedType::create(SVGPropertyTraits<SVGPathByteStream>::fromString(string));
-}
-
-std::unique_ptr<SVGAnimatedType> SVGAnimatedPathAnimator::startAnimValAnimation(const SVGElementAnimatedPropertyList& animatedTypes)
-{
-    ASSERT(animatedTypes.size() >= 1);
-
-    // Build initial path byte stream.
-    auto animatedType = SVGAnimatedType::create<SVGPathByteStream>();
-    resetAnimValToBaseVal(animatedTypes, *animatedType);
-    return animatedType;
-}
-
-void SVGAnimatedPathAnimator::stopAnimValAnimation(const SVGElementAnimatedPropertyList& animatedTypes)
-{
-    stopAnimValAnimationForType<SVGAnimatedPathSegListPropertyTearOff>(animatedTypes);
-}
-
-void SVGAnimatedPathAnimator::resetAnimValToBaseVal(const SVGElementAnimatedPropertyList& animatedTypes, SVGPathByteStream* byteStream)
-{
-    RefPtr<SVGAnimatedPathSegListPropertyTearOff> property = castAnimatedPropertyToActualType<SVGAnimatedPathSegListPropertyTearOff>(animatedTypes[0].properties[0].get());
-    const auto& baseValue = property->currentBaseValue();
-
-    buildSVGPathByteStreamFromSVGPathSegListValues(baseValue, *byteStream, UnalteredParsing);
-
-    Vector<RefPtr<SVGAnimatedPathSegListPropertyTearOff>> result;
-
-    for (auto& type : animatedTypes) {
-        auto* segment = castAnimatedPropertyToActualType<SVGAnimatedPathSegListPropertyTearOff>(type.properties[0].get());
-        if (segment->isAnimating())
-            continue;
-        result.append(segment);
-    }
-
-    if (!result.isEmpty()) {
-        SVGElement::InstanceUpdateBlocker blocker(*property->contextElement());
-        for (auto& segment : result)
-            segment->animationStarted(byteStream, &baseValue);
-    }
-}
-
-void SVGAnimatedPathAnimator::resetAnimValToBaseVal(const SVGElementAnimatedPropertyList& animatedTypes, SVGAnimatedType& type)
-{
-    ASSERT(animatedTypes.size() >= 1);
-    ASSERT(type.type() == m_type);
-    resetAnimValToBaseVal(animatedTypes, &type.as<SVGPathByteStream>());
-}
-
-void SVGAnimatedPathAnimator::animValWillChange(const SVGElementAnimatedPropertyList& animatedTypes)
-{
-    animValWillChangeForType<SVGAnimatedPathSegListPropertyTearOff>(animatedTypes);
-}
-
-void SVGAnimatedPathAnimator::animValDidChange(const SVGElementAnimatedPropertyList& animatedTypes)
-{
-    animValDidChangeForType<SVGAnimatedPathSegListPropertyTearOff>(animatedTypes);
-}
-
-void SVGAnimatedPathAnimator::addAnimatedTypes(SVGAnimatedType* from, SVGAnimatedType* to)
-{
-    ASSERT(from->type() == AnimatedPath);
-    ASSERT(from->type() == to->type());
-
-    const auto& fromPath = from->as<SVGPathByteStream>();
-    auto& toPath = to->as<SVGPathByteStream>();
-    unsigned fromPathSize = fromPath.size();
-    if (!fromPathSize || fromPathSize != toPath.size())
-        return;
-    addToSVGPathByteStream(toPath, fromPath);
-}
-
-void SVGAnimatedPathAnimator::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGAnimatedType* from, SVGAnimatedType* to, SVGAnimatedType* toAtEndOfDuration, SVGAnimatedType* animated)
-{
-    ASSERT(m_animationElement);
-    ASSERT(m_contextElement);
-
-    bool isToAnimation = m_animationElement->animationMode() == AnimationMode::To;
-    auto& animatedPath = animated->as<SVGPathByteStream>();
-
-    SVGPathByteStream underlyingPath;
-    if (isToAnimation)
-        underlyingPath = animatedPath;
-
-    const auto& fromPath = isToAnimation ? underlyingPath : from->as<SVGPathByteStream>();
-    const auto& toPath = to->as<SVGPathByteStream>();
-    const auto& toAtEndOfDurationPath = toAtEndOfDuration->as<SVGPathByteStream>();
-
-    // Cache the current animated value before the buildAnimatedSVGPathByteStream() clears animatedPath.
-    SVGPathByteStream lastAnimatedPath;
-    if (!fromPath.size() || (m_animationElement->isAdditive() && !isToAnimation))
-        lastAnimatedPath = animatedPath;
-
-    // Pass false to 'resizeAnimatedListIfNeeded' here, as the path animation is not a regular Vector<SVGXXX> type, but a SVGPathByteStream, that works differently.
-    if (!m_animationElement->adjustFromToListValues<SVGPathByteStream>(fromPath, toPath, animatedPath, percentage, false))
-        return;
-
-    buildAnimatedSVGPathByteStream(fromPath, toPath, animatedPath, percentage);
-
-    // Handle additive='sum'.
-    if (!lastAnimatedPath.isEmpty())
-        addToSVGPathByteStream(animatedPath, lastAnimatedPath);
-
-    // Handle accumulate='sum'.
-    if (m_animationElement->isAccumulated() && repeatCount)
-        addToSVGPathByteStream(animatedPath, toAtEndOfDurationPath, repeatCount);
-}
-
-float SVGAnimatedPathAnimator::calculateDistance(const String&, const String&)
-{
-    // FIXME: Support paced animations.
-    return -1;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPathh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAnimatedPath.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPath.h       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGAnimatedPath.h  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,53 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2011, 2012. All rights reserved.
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGAnimatedPathSegListPropertyTearOff.h"
-#include "SVGAnimatedTypeAnimator.h"
-#include "SVGAttributeAccessor.h"
-
-namespace WebCore {
-
-class SVGAnimationElement;
-
-using SVGAnimatedPathSegList = SVGAnimatedPathSegListPropertyTearOff;
-using SVGAnimatedPathSegListAttribute = SVGAnimatedAttributeList<SVGAnimatedPathSegList>;
-
-class SVGAnimatedPathAnimator final : public SVGAnimatedTypeAnimator {
-public:
-    SVGAnimatedPathAnimator(SVGAnimationElement*, SVGElement*);
-
-    std::unique_ptr<SVGAnimatedType> constructFromString(const String&) override;
-    std::unique_ptr<SVGAnimatedType> startAnimValAnimation(const SVGElementAnimatedPropertyList&) override;
-    void stopAnimValAnimation(const SVGElementAnimatedPropertyList&) override;
-    void resetAnimValToBaseVal(const SVGElementAnimatedPropertyList&, SVGAnimatedType&) override;
-    void animValWillChange(const SVGElementAnimatedPropertyList&) override;
-    void animValDidChange(const SVGElementAnimatedPropertyList&) override;
-
-    void addAnimatedTypes(SVGAnimatedType*, SVGAnimatedType*) override;
-    void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGAnimatedType*, SVGAnimatedType*, SVGAnimatedType*, SVGAnimatedType*) override;
-    float calculateDistance(const String& fromString, const String& toString) override;
-
-private:
-    void resetAnimValToBaseVal(const SVGElementAnimatedPropertyList&, SVGPathByteStream*);
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedType.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedType.h       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGAnimatedType.h  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -80,13 +80,8 @@
</span><span class="cx"> 
</span><span class="cx">     AnimatedPropertyType type() const
</span><span class="cx">     {
</span><del>-        static AnimatedPropertyType animatedTypes[] = {
-            AnimatedPath,
-            AnimatedTransformList
-        };
-
-        ASSERT(static_cast<size_t>(m_value.index()) < sizeof(animatedTypes) / sizeof(animatedTypes[0]));
-        return animatedTypes[m_value.index()];
</del><ins>+        ASSERT(!m_value.index());
+        return AnimatedTransformList;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     String valueAsString() const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatorFactoryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatorFactory.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatorFactory.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGAnimatorFactory.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -19,7 +19,6 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include "SVGAnimatedPath.h"
</del><span class="cx"> #include "SVGAnimatedTransformList.h"
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -30,31 +29,7 @@
</span><span class="cx"> public:
</span><span class="cx">     static bool isSupportedAttributeType(AnimatedPropertyType attributeType)
</span><span class="cx">     {
</span><del>-        switch (attributeType) {
-        case AnimatedAngle:
-        case AnimatedBoolean:
-        case AnimatedColor:
-        case AnimatedEnumeration:
-        case AnimatedInteger:
-        case AnimatedIntegerOptionalInteger:
-        case AnimatedLength:
-        case AnimatedLengthList:
-        case AnimatedNumber:
-        case AnimatedNumberList:
-        case AnimatedNumberOptionalNumber:
-        case AnimatedPoints:
-        case AnimatedPreserveAspectRatio:
-        case AnimatedRect:
-        case AnimatedString:
-        case AnimatedUnknown:
-            break;
-
-        case AnimatedPath:
-        case AnimatedTransformList:
-            return true;
-        }
-
-        return false;
</del><ins>+        return attributeType == AnimatedTransformList;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static std::unique_ptr<SVGAnimatedTypeAnimator> create(SVGAnimationElement* animationElement, SVGElement* contextElement, AnimatedPropertyType attributeType)
</span><span class="lines">@@ -61,33 +36,10 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(animationElement);
</span><span class="cx">         ASSERT(contextElement);
</span><del>-
-        switch (attributeType) {
-        case AnimatedAngle:
-        case AnimatedBoolean:
-        case AnimatedColor:
-        case AnimatedEnumeration:
-        case AnimatedInteger:
-        case AnimatedIntegerOptionalInteger:
-        case AnimatedLength:
-        case AnimatedLengthList:
-        case AnimatedNumber:
-        case AnimatedNumberList:
-        case AnimatedNumberOptionalNumber:
-        case AnimatedPoints:
-        case AnimatedPreserveAspectRatio:
-        case AnimatedRect:
-        case AnimatedString:
-        case AnimatedUnknown:
-            break;
-
-        case AnimatedPath:
-            return std::make_unique<SVGAnimatedPathAnimator>(animationElement, contextElement);
-        case AnimatedTransformList:
</del><ins>+        ASSERT(attributeType == AnimatedTransformList);
+        
+        if (attributeType == AnimatedTransformList)
</ins><span class="cx">             return std::make_unique<SVGAnimatedTransformListAnimator>(animationElement, contextElement);
</span><del>-        }
-
-        ASSERT_NOT_REACHED();
</del><span class="cx">         return nullptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathByteStreamh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathByteStream.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathByteStream.h     2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathByteStream.h        2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</span><del>- * Copyright (C) 2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -49,6 +49,12 @@
</span><span class="cx">     typedef Data::const_iterator DataIterator;
</span><span class="cx"> 
</span><span class="cx">     SVGPathByteStream() { }
</span><ins>+
+    SVGPathByteStream(const String& string)
+    {
+        buildSVGPathByteStreamFromString(string, *this, UnalteredParsing);
+    }
+
</ins><span class="cx">     SVGPathByteStream(const SVGPathByteStream& other)
</span><span class="cx">     {
</span><span class="cx">         *this = other;
</span><span class="lines">@@ -92,24 +98,8 @@
</span><span class="cx">     bool isEmpty() const { return m_data.isEmpty(); }
</span><span class="cx">     unsigned size() const { return m_data.size(); }
</span><span class="cx"> 
</span><del>-    // Only defined to let SVGAnimatedPathAnimator use the standard list code paths - this method is never called.
-    void resize(unsigned) { }
-
</del><span class="cx"> private:
</span><span class="cx">     Data m_data;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-template<>
-struct SVGPropertyTraits<SVGPathByteStream> {
-    static SVGPathByteStream initialValue() { return SVGPathByteStream(); }
-    static SVGPathByteStream fromString(const String& string)
-    {
-        SVGPathByteStream byteStream;
-        buildSVGPathByteStreamFromString(string, byteStream, UnalteredParsing);
-        return byteStream;
-    }
-    static Optional<SVGPathByteStream> parse(const QualifiedName&, const String&) { ASSERT_NOT_REACHED(); return { }; }
-    static String toString(const SVGPathByteStream&) { ASSERT_NOT_REACHED(); return emptyString(); }
-};
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathElement.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathElement.cpp      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathElement.cpp 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org>
</span><span class="cx">  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
</span><del>- * Copyright (C) 2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -27,30 +27,9 @@
</span><span class="cx"> #include "SVGDocumentExtensions.h"
</span><span class="cx"> #include "SVGMPathElement.h"
</span><span class="cx"> #include "SVGNames.h"
</span><del>-#include "SVGPathSegArcAbs.h"
-#include "SVGPathSegArcRel.h"
-#include "SVGPathSegClosePath.h"
-#include "SVGPathSegCurvetoCubicAbs.h"
-#include "SVGPathSegCurvetoCubicRel.h"
-#include "SVGPathSegCurvetoCubicSmoothAbs.h"
-#include "SVGPathSegCurvetoCubicSmoothRel.h"
-#include "SVGPathSegCurvetoQuadraticAbs.h"
-#include "SVGPathSegCurvetoQuadraticRel.h"
-#include "SVGPathSegCurvetoQuadraticSmoothAbs.h"
-#include "SVGPathSegCurvetoQuadraticSmoothRel.h"
-#include "SVGPathSegLinetoAbs.h"
-#include "SVGPathSegLinetoHorizontalAbs.h"
-#include "SVGPathSegLinetoHorizontalRel.h"
-#include "SVGPathSegLinetoRel.h"
-#include "SVGPathSegLinetoVerticalAbs.h"
-#include "SVGPathSegLinetoVerticalRel.h"
-#include "SVGPathSegList.h"
-#include "SVGPathSegMovetoAbs.h"
-#include "SVGPathSegMovetoRel.h"
</del><span class="cx"> #include "SVGPathUtilities.h"
</span><span class="cx"> #include "SVGPoint.h"
</span><span class="cx"> #include <wtf/IsoMallocInlines.h>
</span><del>-#include <wtf/NeverDestroyed.h>
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -61,7 +40,11 @@
</span><span class="cx">     , SVGExternalResourcesRequired(this)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(hasTagName(SVGNames::pathTag));
</span><del>-    registerAttributes();
</del><ins>+
+    static std::once_flag onceFlag;
+    std::call_once(onceFlag, [] {
+        PropertyRegistry::registerProperty<SVGNames::dAttr, &SVGPathElement::m_pathSegList>();
+    });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref<SVGPathElement> SVGPathElement::create(const QualifiedName& tagName, Document& document)
</span><span class="lines">@@ -69,136 +52,11 @@
</span><span class="cx">     return adoptRef(*new SVGPathElement(tagName, document));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-float SVGPathElement::getTotalLength() const
-{
-    float totalLength = 0;
-    getTotalLengthOfSVGPathByteStream(pathByteStream(), totalLength);
-    return totalLength;
-}
-
-Ref<SVGPoint> SVGPathElement::getPointAtLength(float length) const
-{
-    FloatPoint point;
-    getPointAtLengthOfSVGPathByteStream(pathByteStream(), length, point);
-    return SVGPoint::create(point);
-}
-
-unsigned SVGPathElement::getPathSegAtLength(float length) const
-{
-    unsigned pathSeg = 0;
-    getSVGPathSegAtLengthFromSVGPathByteStream(pathByteStream(), length, pathSeg);
-    return pathSeg;
-}
-
-Ref<SVGPathSegClosePath> SVGPathElement::createSVGPathSegClosePath(SVGPathSegRole role)
-{
-    return SVGPathSegClosePath::create(*this, role);
-}
-
-Ref<SVGPathSegMovetoAbs> SVGPathElement::createSVGPathSegMovetoAbs(float x, float y, SVGPathSegRole role)
-{
-    return SVGPathSegMovetoAbs::create(*this, role, x, y);
-}
-
-Ref<SVGPathSegMovetoRel> SVGPathElement::createSVGPathSegMovetoRel(float x, float y, SVGPathSegRole role)
-{
-    return SVGPathSegMovetoRel::create(*this, role, x, y);
-}
-
-Ref<SVGPathSegLinetoAbs> SVGPathElement::createSVGPathSegLinetoAbs(float x, float y, SVGPathSegRole role)
-{
-    return SVGPathSegLinetoAbs::create(*this, role, x, y);
-}
-
-Ref<SVGPathSegLinetoRel> SVGPathElement::createSVGPathSegLinetoRel(float x, float y, SVGPathSegRole role)
-{
-    return SVGPathSegLinetoRel::create(*this, role, x, y);
-}
-
-Ref<SVGPathSegCurvetoCubicAbs> SVGPathElement::createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoCubicAbs::create(*this, role, x, y, x1, y1, x2, y2);
-}
-
-Ref<SVGPathSegCurvetoCubicRel> SVGPathElement::createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoCubicRel::create(*this, role, x, y, x1, y1, x2, y2);
-}
-
-Ref<SVGPathSegCurvetoQuadraticAbs> SVGPathElement::createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoQuadraticAbs::create(*this, role, x, y, x1, y1);
-}
-
-Ref<SVGPathSegCurvetoQuadraticRel> SVGPathElement::createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoQuadraticRel::create(*this, role, x, y, x1, y1);
-}
-
-Ref<SVGPathSegArcAbs> SVGPathElement::createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role)
-{
-    return SVGPathSegArcAbs::create(*this, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
-}
-
-Ref<SVGPathSegArcRel> SVGPathElement::createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role)
-{
-    return SVGPathSegArcRel::create(*this, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
-}
-
-Ref<SVGPathSegLinetoHorizontalAbs> SVGPathElement::createSVGPathSegLinetoHorizontalAbs(float x, SVGPathSegRole role)
-{
-    return SVGPathSegLinetoHorizontalAbs::create(*this, role, x);
-}
-
-Ref<SVGPathSegLinetoHorizontalRel> SVGPathElement::createSVGPathSegLinetoHorizontalRel(float x, SVGPathSegRole role)
-{
-    return SVGPathSegLinetoHorizontalRel::create(*this, role, x);
-}
-
-Ref<SVGPathSegLinetoVerticalAbs> SVGPathElement::createSVGPathSegLinetoVerticalAbs(float y, SVGPathSegRole role)
-{
-    return SVGPathSegLinetoVerticalAbs::create(*this, role, y);
-}
-
-Ref<SVGPathSegLinetoVerticalRel> SVGPathElement::createSVGPathSegLinetoVerticalRel(float y, SVGPathSegRole role)
-{
-    return SVGPathSegLinetoVerticalRel::create(*this, role, y);
-}
-
-Ref<SVGPathSegCurvetoCubicSmoothAbs> SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoCubicSmoothAbs::create(*this, role, x, y, x2, y2);
-}
-
-Ref<SVGPathSegCurvetoCubicSmoothRel> SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoCubicSmoothRel::create(*this, role, x, y, x2, y2);
-}
-
-Ref<SVGPathSegCurvetoQuadraticSmoothAbs> SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoQuadraticSmoothAbs::create(*this, role, x, y);
-}
-
-Ref<SVGPathSegCurvetoQuadraticSmoothRel> SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y, SVGPathSegRole role)
-{
-    return SVGPathSegCurvetoQuadraticSmoothRel::create(*this, role, x, y);
-}
-
-void SVGPathElement::registerAttributes()
-{
-    auto& registry = attributeRegistry();
-    if (!registry.isEmpty())
-        return;
-    registry.registerAttribute(SVGAnimatedCustomPathSegListAttributeAccessor::singleton<SVGNames::dAttr, &SVGPathElement::m_pathSegList>());
-}
-
</del><span class="cx"> void SVGPathElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
</span><span class="cx"> {
</span><span class="cx">     if (name == SVGNames::dAttr) {
</span><del>-        if (!buildSVGPathByteStreamFromString(value, m_pathByteStream, UnalteredParsing))
</del><ins>+        if (!m_pathSegList->baseVal()->parse(value))
</ins><span class="cx">             document().accessSVGExtensions().reportError("Problem parsing d=\"" + value + "\"");
</span><del>-        m_cachedPath = WTF::nullopt;
</del><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -208,24 +66,15 @@
</span><span class="cx"> 
</span><span class="cx"> void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
</span><span class="cx"> {
</span><del>-    if (isKnownAttribute(attrName)) {
</del><ins>+    if (attrName == SVGNames::dAttr) {
</ins><span class="cx">         InstanceInvalidationGuard guard(*this);
</span><ins>+        invalidateMPathDependencies();
</ins><span class="cx"> 
</span><del>-        RenderSVGPath* renderer = downcast<RenderSVGPath>(this->renderer());
-        if (attrName == SVGNames::dAttr) {
-            if (m_pathSegList.shouldSynchronize() && !lookupAnimatedProperty(m_pathSegList)->isAnimating()) {
-                SVGPathSegListValues newList(PathSegUnalteredRole);
-                buildSVGPathSegListValuesFromByteStream(m_pathByteStream, *this, newList, UnalteredParsing);
-                m_pathSegList.setValue(WTFMove(newList));
-            }
-
-            if (renderer)
-                renderer->setNeedsShapeUpdate();
-            invalidateMPathDependencies();
</del><ins>+        if (auto* renderer = downcast<RenderSVGPath>(this->renderer())) {
+            renderer->setNeedsShapeUpdate();
+            RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (renderer)
-            RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
</del><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -258,106 +107,27 @@
</span><span class="cx">     invalidateMPathDependencies();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const SVGPathByteStream& SVGPathElement::pathByteStream() const
</del><ins>+float SVGPathElement::getTotalLength() const
</ins><span class="cx"> {
</span><del>-    auto property = lookupAnimatedProperty(m_pathSegList);
-    if (!property || !property->isAnimating())
-        return m_pathByteStream;
-    
-    if (auto* animatedPathByteStream = static_cast<SVGAnimatedPathSegListPropertyTearOff*>(property.get())->animatedPathByteStream())
-        return *animatedPathByteStream;
-
-    return m_pathByteStream;
</del><ins>+    float totalLength = 0;
+    getTotalLengthOfSVGPathByteStream(pathByteStream(), totalLength);
+    return totalLength;
</ins><span class="cx"> }
</span><del>-    
-Path SVGPathElement::pathForByteStream() const
-{
-    const auto& pathByteStreamToUse = pathByteStream();
</del><span class="cx"> 
</span><del>-    if (&pathByteStreamToUse == &m_pathByteStream) {
-        if (!m_cachedPath)
-            m_cachedPath = buildPathFromByteStream(m_pathByteStream);
-        return *m_cachedPath;
-    }
-    
-    return buildPathFromByteStream(pathByteStreamToUse);
-}
-
-RefPtr<SVGLegacyAnimatedProperty> SVGPathElement::lookupOrCreateDWrapper()
</del><ins>+Ref<SVGPoint> SVGPathElement::getPointAtLength(float length) const
</ins><span class="cx"> {
</span><del>-    return m_pathSegList.animatedProperty(attributeOwnerProxy());
</del><ins>+    FloatPoint point;
+    getPointAtLengthOfSVGPathByteStream(pathByteStream(), length, point);
+    return SVGPoint::create(point);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGPathElement::animatedPropertyWillBeDeleted()
</del><ins>+unsigned SVGPathElement::getPathSegAtLength(float length) const
</ins><span class="cx"> {
</span><del>-    // m_pathSegList.shouldSynchronize is set to true when the 'd' wrapper for m_pathSegList
-    // is created and cached. We need to reset it back to false when this wrapper is deleted
-    // so we can be sure if shouldSynchronize is true, SVGAttributeAccessor::lookupAnimatedProperty()
-    // will return a valid cached 'd' wrapper for the m_pathSegList.
-    m_pathSegList.setShouldSynchronize(false);
</del><ins>+    unsigned pathSeg = 0;
+    getSVGPathSegAtLengthFromSVGPathByteStream(pathByteStream(), length, pathSeg);
+    return pathSeg;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref<SVGPathSegList> SVGPathElement::pathSegList()
-{
-    return static_pointer_cast<SVGAnimatedPathSegListPropertyTearOff>(lookupOrCreateDWrapper())->baseVal();
-}
-
-RefPtr<SVGPathSegList> SVGPathElement::normalizedPathSegList()
-{
-    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
-    return nullptr;
-}
-
-Ref<SVGPathSegList> SVGPathElement::animatedPathSegList()
-{
-    m_isAnimValObserved = true;
-    return static_pointer_cast<SVGAnimatedPathSegListPropertyTearOff>(lookupOrCreateDWrapper())->animVal();
-}
-
-RefPtr<SVGPathSegList> SVGPathElement::animatedNormalizedPathSegList()
-{
-    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
-    return nullptr;
-}
-
-size_t SVGPathElement::approximateMemoryCost() const
-{
-    // This is an approximation for path memory cost since the path is parsed on demand.
-    size_t pathMemoryCost = (m_pathByteStream.size() / 10) * sizeof(FloatPoint);
-    // We need to account for the memory which is allocated by the RenderSVGPath::m_path.
-    return sizeof(*this) + (renderer() ? pathMemoryCost * 2 + sizeof(RenderSVGPath) : pathMemoryCost);
-}
-
-void SVGPathElement::pathSegListChanged(SVGPathSegRole role, ListModification listModification)
-{
-    switch (role) {
-    case PathSegNormalizedRole:
-        // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
-        break;
-    case PathSegUnalteredRole: {
-        auto& pathSegList = m_pathSegList.value(false);
-        if (listModification == ListModificationAppend) {
-            ASSERT(!pathSegList.isEmpty());
-            appendSVGPathByteStreamFromSVGPathSeg(pathSegList.last().copyRef(), m_pathByteStream, UnalteredParsing);
-        } else
-            buildSVGPathByteStreamFromSVGPathSegListValues(pathSegList, m_pathByteStream, UnalteredParsing);
-        m_cachedPath = WTF::nullopt;
-        break;
-    }
-    case PathSegUndefinedRole:
-        return;
-    }
-
-    invalidateSVGAttributes();
-    
-    RenderSVGPath* renderer = downcast<RenderSVGPath>(this->renderer());
-    if (!renderer)
-        return;
-
-    renderer->setNeedsShapeUpdate();
-    RenderSVGResource::markForLayoutAndParentResourceInvalidation(*renderer);
-}
-
</del><span class="cx"> FloatRect SVGPathElement::getBBox(StyleUpdateStrategy styleUpdateStrategy)
</span><span class="cx"> {
</span><span class="cx">     if (styleUpdateStrategy == AllowStyleUpdate)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathElement.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathElement.h        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathElement.h   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -22,34 +22,14 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include "Path.h"
</span><del>-#include "SVGAnimatedPath.h"
</del><span class="cx"> #include "SVGExternalResourcesRequired.h"
</span><span class="cx"> #include "SVGGeometryElement.h"
</span><span class="cx"> #include "SVGNames.h"
</span><span class="cx"> #include "SVGPathByteStream.h"
</span><del>-#include "SVGPathSegListValues.h"
</del><ins>+#include "SVGPathSegImpl.h"
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGPathSegArcAbs;
-class SVGPathSegArcRel;
-class SVGPathSegClosePath;
-class SVGPathSegLinetoAbs;
-class SVGPathSegLinetoRel;
-class SVGPathSegMovetoAbs;
-class SVGPathSegMovetoRel;
-class SVGPathSegCurvetoCubicAbs;
-class SVGPathSegCurvetoCubicRel;
-class SVGPathSegLinetoVerticalAbs;
-class SVGPathSegLinetoVerticalRel;
-class SVGPathSegLinetoHorizontalAbs;
-class SVGPathSegLinetoHorizontalRel;
-class SVGPathSegCurvetoQuadraticAbs;
-class SVGPathSegCurvetoQuadraticRel;
-class SVGPathSegCurvetoCubicSmoothAbs;
-class SVGPathSegCurvetoCubicSmoothRel;
-class SVGPathSegCurvetoQuadraticSmoothAbs;
-class SVGPathSegCurvetoQuadraticSmoothRel;
</del><span class="cx"> class SVGPathSegList;
</span><span class="cx"> class SVGPoint;
</span><span class="cx"> 
</span><span class="lines">@@ -58,74 +38,87 @@
</span><span class="cx"> public:
</span><span class="cx">     static Ref<SVGPathElement> create(const QualifiedName&, Document&);
</span><span class="cx">     
</span><ins>+    static Ref<SVGPathSegClosePath> createSVGPathSegClosePath() { return SVGPathSegClosePath::create(); }
+    static Ref<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y) { return SVGPathSegMovetoAbs::create(x, y); }
+    static Ref<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y) { return SVGPathSegMovetoRel::create(x, y); }
+    static Ref<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y) { return SVGPathSegLinetoAbs::create(x, y); }
+    static Ref<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y) { return SVGPathSegLinetoRel::create(x, y); }
+    static Ref<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2)
+    {
+        return SVGPathSegCurvetoCubicAbs::create(x, y, x1, y1, x2, y2);
+    }
+    static Ref<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2)
+    {
+        return SVGPathSegCurvetoCubicRel::create(x, y, x1, y1, x2, y2);
+    }
+    static Ref<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1)
+    {
+        return SVGPathSegCurvetoQuadraticAbs::create(x, y, x1, y1);
+    }
+    static Ref<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1)
+    {
+        return SVGPathSegCurvetoQuadraticRel::create(x, y, x1, y1);
+    }
+    static Ref<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+    {
+        return SVGPathSegArcAbs::create(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    }
+    static Ref<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+    {
+        return SVGPathSegArcRel::create(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    }
+    static Ref<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x) { return SVGPathSegLinetoHorizontalAbs::create(x); }
+    static Ref<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x) { return SVGPathSegLinetoHorizontalRel::create(x); }
+    static Ref<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y) { return SVGPathSegLinetoVerticalAbs::create(y); }
+    static Ref<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y) { return SVGPathSegLinetoVerticalRel::create(y); }
+    static Ref<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2)
+    {
+        return SVGPathSegCurvetoCubicSmoothAbs::create(x, y, x2, y2);
+    }
+    static Ref<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2)
+    {
+        return SVGPathSegCurvetoCubicSmoothRel::create(x, y, x2, y2);
+    }
+    static Ref<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y)
+    {
+        return SVGPathSegCurvetoQuadraticSmoothAbs::create(x, y);
+    }
+    static Ref<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y)
+    {
+        return SVGPathSegCurvetoQuadraticSmoothRel::create(x, y);
+    }
+
</ins><span class="cx">     float getTotalLength() const final;
</span><span class="cx">     Ref<SVGPoint> getPointAtLength(float distance) const final;
</span><span class="cx">     unsigned getPathSegAtLength(float distance) const;
</span><span class="cx"> 
</span><del>-    Ref<SVGPathSegClosePath> createSVGPathSegClosePath(SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y, SVGPathSegRole = PathSegUndefinedRole);
-    Ref<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y, SVGPathSegRole = PathSegUndefinedRole);
-
-    // Used in the bindings only.
-    Ref<SVGPathSegList> pathSegList();
-    Ref<SVGPathSegList> animatedPathSegList();
-    RefPtr<SVGPathSegList> normalizedPathSegList();
-    RefPtr<SVGPathSegList> animatedNormalizedPathSegList();
-
-    const SVGPathByteStream& pathByteStream() const;
-    Path pathForByteStream() const;
-
-    void pathSegListChanged(SVGPathSegRole, ListModification = ListModificationUnknown);
-
</del><span class="cx">     FloatRect getBBox(StyleUpdateStrategy = AllowStyleUpdate) final;
</span><span class="cx"> 
</span><del>-    bool isAnimValObserved() const { return m_isAnimValObserved; }
</del><ins>+    Ref<SVGPathSegList>& pathSegList() { return m_pathSegList->baseVal(); }
+    RefPtr<SVGPathSegList>& animatedPathSegList() { return m_pathSegList->animVal(); }
</ins><span class="cx"> 
</span><del>-    void animatedPropertyWillBeDeleted();
</del><ins>+    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
+    RefPtr<SVGPathSegList> normalizedPathSegList() { return nullptr; }
+    RefPtr<SVGPathSegList> animatedNormalizedPathSegList() { return nullptr; }
</ins><span class="cx"> 
</span><del>-    size_t approximateMemoryCost() const final;
</del><ins>+    const SVGPathByteStream& pathByteStream() const { return m_pathSegList->currentPathByteStream(); }
+    Path path() const { return m_pathSegList->currentPath(); }
+    size_t approximateMemoryCost() const final { return m_pathSegList->approximateMemoryCost(); }
</ins><span class="cx"> 
</span><del>-    const SVGPathSegListValues& pathSegList() const { return m_pathSegList.currentValue(attributeOwnerProxy()); }
-    RefPtr<SVGAnimatedPathSegList> pathSegListAnimated() { return m_pathSegList.animatedProperty(attributeOwnerProxy()); }
-
</del><span class="cx"> private:
</span><span class="cx">     SVGPathElement(const QualifiedName&, Document&);
</span><span class="cx"> 
</span><span class="cx">     using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><del>-    static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
-    static void registerAttributes();
</del><span class="cx">     const SVGAttributeOwnerProxy& attributeOwnerProxy() const final { return m_attributeOwnerProxy; }
</span><span class="cx"> 
</span><span class="cx">     using PropertyRegistry = SVGPropertyOwnerRegistry<SVGPathElement, SVGGeometryElement, SVGExternalResourcesRequired>;
</span><span class="cx">     const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
</span><span class="cx">     
</span><del>-    static bool isKnownAttribute(const QualifiedName& attributeName)
-    {
-        return AttributeOwnerProxy::isKnownAttribute(attributeName) || PropertyRegistry::isKnownAttribute(attributeName);
-    }
-
</del><span class="cx">     void parseAttribute(const QualifiedName&, const AtomicString&) final;
</span><span class="cx">     void svgAttributeChanged(const QualifiedName&) final;
</span><span class="cx"> 
</span><span class="cx">     bool isValid() const final { return SVGTests::isValid(); }
</span><span class="cx">     bool supportsMarkers() const final { return true; }
</span><del>-    RefPtr<SVGLegacyAnimatedProperty> lookupOrCreateDWrapper();
</del><span class="cx"> 
</span><span class="cx">     RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
</span><span class="cx"> 
</span><span class="lines">@@ -135,34 +128,9 @@
</span><span class="cx">     void invalidateMPathDependencies();
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    SVGPathByteStream m_pathByteStream;
-    mutable Optional<Path> m_cachedPath;
-    bool m_isAnimValObserved { false };
-
-    class SVGAnimatedCustomPathSegListAttribute : public SVGAnimatedPathSegListAttribute {
-    public:
-        SVGAnimatedCustomPathSegListAttribute(SVGPathElement& element)
-            : SVGAnimatedPathSegListAttribute(PathSegUnalteredRole)
-            , m_element(element)
-        {
-        }
-
-        SVGPathSegListValues& value(bool shouldBuildSegListValues = true)
-        {
-            if (shouldBuildSegListValues && m_property.isEmpty())
-                buildSVGPathSegListValuesFromByteStream(m_element.m_pathByteStream, m_element, m_property, UnalteredParsing);
-            return m_property;
-        }
-
-    private:
-        SVGPathElement& m_element;
-    };
-
-    using SVGAnimatedCustomPathSegListAttributeAccessor = SVGAnimatedAttributeAccessor<SVGPathElement, SVGAnimatedCustomPathSegListAttribute, AnimatedPath>;
-
</del><span class="cx">     AttributeOwnerProxy m_attributeOwnerProxy { *this };
</span><span class="cx">     PropertyRegistry m_propertyRegistry { *this };
</span><del>-    SVGAnimatedCustomPathSegListAttribute m_pathSegList { *this };
</del><ins>+    Ref<SVGAnimatedPathSegList> m_pathSegList { SVGAnimatedPathSegList::create(this) };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSeg.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSeg.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSeg.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,6 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann <zimmermann@kde.org>
</span><span class="cx">  * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
</span><ins>+ * Copyright (C) 2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -20,7 +21,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include <wtf/RefCounted.h>
</del><ins>+#include "SVGProperty.h"
</ins><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -48,15 +49,8 @@
</span><span class="cx">     PathSegCurveToQuadraticSmoothRel = 19
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-enum SVGPathSegRole {
-    PathSegUnalteredRole = 0,
-    PathSegNormalizedRole = 1,
-    PathSegUndefinedRole = 2
-};
-
-class SVGPathSeg : public RefCounted<SVGPathSeg> {
</del><ins>+class SVGPathSeg : public SVGProperty {
</ins><span class="cx"> public:
</span><del>-    SVGPathSeg() = default;
</del><span class="cx">     virtual ~SVGPathSeg() = default;
</span><span class="cx"> 
</span><span class="cx">     // Forward declare these enums in the w3c naming scheme, for IDL generation
</span><span class="lines">@@ -85,6 +79,10 @@
</span><span class="cx"> 
</span><span class="cx">     virtual unsigned short pathSegType() const = 0;
</span><span class="cx">     virtual String pathSegTypeAsLetter() const = 0;
</span><ins>+    virtual Ref<SVGPathSeg> clone() const = 0;
+
+protected:
+    using SVGProperty::SVGProperty;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegArch"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegArc.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegArc.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegArc.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,101 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegArc : public SVGPathSegWithContext {
-public:
-    SVGPathSegArc(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-        : SVGPathSegWithContext(element, role)
-        , m_x(x)
-        , m_y(y)
-        , m_r1(r1)
-        , m_r2(r2)
-        , m_angle(angle)
-        , m_largeArcFlag(largeArcFlag)
-        , m_sweepFlag(sweepFlag)
-    {
-    }
-
-    float x() const { return m_x; }
-    void setX(float x)
-    {
-        m_x = x;
-        commitChange();
-    }
-
-    float y() const { return m_y; }
-    void setY(float y)
-    {
-        m_y = y;
-        commitChange();
-    }
-
-    float r1() const { return m_r1; }
-    void setR1(float r1)
-    {
-        m_r1 = r1;
-        commitChange();
-    }
-
-    float r2() const { return m_r2; }
-    void setR2(float r2)
-    {
-        m_r2 = r2;
-        commitChange();
-    }
-
-    float angle() const { return m_angle; }
-    void setAngle(float angle)
-    {
-        m_angle = angle;
-        commitChange();
-    }
-
-    bool largeArcFlag() const { return m_largeArcFlag; }
-    void setLargeArcFlag(bool largeArcFlag)
-    {
-        m_largeArcFlag = largeArcFlag;
-        commitChange();
-    }
-
-    bool sweepFlag() const { return m_sweepFlag; }
-    void setSweepFlag(bool sweepFlag)
-    {
-        m_sweepFlag = sweepFlag;
-        commitChange();
-    }
-
-private:
-    float m_x;
-    float m_y;
-    float m_r1;
-    float m_r2;
-    float m_angle;
-
-    bool m_largeArcFlag : 1;
-    bool m_sweepFlag : 1;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegArcAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegArcAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegArcAbs.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegArcAbs.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegArc.h"
-
-namespace WebCore {
-
-class SVGPathSegArcAbs final : public SVGPathSegArc {
-public:
-    static Ref<SVGPathSegArcAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-    {
-        return adoptRef(*new SVGPathSegArcAbs(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag));
-    }
-
-private:
-    SVGPathSegArcAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-        : SVGPathSegArc(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_ARC_ABS; }
-    String pathSegTypeAsLetter() const final { return "A"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegArcRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegArcRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegArcRel.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegArcRel.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegArc.h"
-
-namespace WebCore {
-
-class SVGPathSegArcRel final : public SVGPathSegArc {
-public:
-    static Ref<SVGPathSegArcRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-    {
-        return adoptRef(*new SVGPathSegArcRel(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag));
-    }
-
-private:
-    SVGPathSegArcRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-        : SVGPathSegArc(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_ARC_REL; }
-    String pathSegTypeAsLetter() const final { return "a"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegClosePathh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegClosePath.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegClosePath.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegClosePath.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,44 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegClosePath final : public SVGPathSegWithContext {
-public:
-    static Ref<SVGPathSegClosePath> create(const SVGPathElement& element, SVGPathSegRole role)
-    {
-        return adoptRef(*new SVGPathSegClosePath(element, role));
-    }
-
-private:
-    SVGPathSegClosePath(const SVGPathElement& element, SVGPathSegRole role)
-        : SVGPathSegWithContext(element, role)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CLOSEPATH; }
-    String pathSegTypeAsLetter() const final { return "Z"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoCubich"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoCubic.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoCubic.h        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoCubic.h   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,91 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoCubic : public SVGPathSegWithContext { 
-public:
-    SVGPathSegCurvetoCubic(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
-        : SVGPathSegWithContext(element, role)
-        , m_x(x)
-        , m_y(y)
-        , m_x1(x1)
-        , m_y1(y1)
-        , m_x2(x2)
-        , m_y2(y2)
-    {
-    }
-
-    float x() const { return m_x; }
-    void setX(float x)
-    {
-        m_x = x;
-        commitChange();
-    }
-
-    float y() const { return m_y; }
-    void setY(float y)
-    {
-        m_y = y;
-        commitChange();
-    }
-
-    float x1() const { return m_x1; }
-    void setX1(float x1)
-    {
-        m_x1 = x1;
-        commitChange();
-    }
-
-    float y1() const { return m_y1; }
-    void setY1(float y1)
-    {
-        m_y1 = y1;
-        commitChange();
-    }
-
-    float x2() const { return m_x2; }
-    void setX2(float x2)
-    {
-        m_x2 = x2;
-        commitChange();
-    }
-
-    float y2() const { return m_y2; }
-    void setY2(float y2)
-    {
-        m_y2 = y2;
-        commitChange();
-    }
-
-private:
-    float m_x;
-    float m_y;
-    float m_x1;
-    float m_y1;
-    float m_x2;
-    float m_y2;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoCubicAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicAbs.h     2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicAbs.h        2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegCurvetoCubic.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoCubicAbs final : public SVGPathSegCurvetoCubic {
-public:
-    static Ref<SVGPathSegCurvetoCubicAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
-    {
-        return adoptRef(*new SVGPathSegCurvetoCubicAbs(element, role, x, y, x1, y1, x2, y2));
-    }
-
-private:
-    SVGPathSegCurvetoCubicAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
-        : SVGPathSegCurvetoCubic(element, role, x, y, x1, y1, x2, y2)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_ABS; }
-    String pathSegTypeAsLetter() const final { return "C"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoCubicRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicRel.h     2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicRel.h        2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegCurvetoCubic.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoCubicRel final : public SVGPathSegCurvetoCubic {
-public:
-    static Ref<SVGPathSegCurvetoCubicRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
-    {
-        return adoptRef(*new SVGPathSegCurvetoCubicRel(element, role, x, y, x1, y1, x2, y2));
-    }
-
-private:
-    SVGPathSegCurvetoCubicRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
-        : SVGPathSegCurvetoCubic(element, role, x, y, x1, y1, x2, y2)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_REL; }
-    String pathSegTypeAsLetter() const final { return "c"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoCubicSmoothh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h  2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h     2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,73 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoCubicSmooth : public SVGPathSegWithContext {
-public:
-    SVGPathSegCurvetoCubicSmooth(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x2, float y2)
-        : SVGPathSegWithContext(element, role)
-        , m_x(x)
-        , m_y(y)
-        , m_x2(x2)
-        , m_y2(y2)
-    {
-    }
-
-    float x() const { return m_x; }
-    void setX(float x)
-    {
-        m_x = x;
-        commitChange();
-    }
-
-    float y() const { return m_y; }
-    void setY(float y)
-    {
-        m_y = y;
-        commitChange();
-    }
-
-    float x2() const { return m_x2; }
-    void setX2(float x2)
-    {
-        m_x2 = x2;
-        commitChange();
-    }
-
-    float y2() const { return m_y2; }
-    void setY2(float y2)
-    {
-        m_y2 = y2;
-        commitChange();
-    }
-
-private:
-    float m_x;
-    float m_y;
-    float m_x2;
-    float m_y2;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoCubicSmoothAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.h       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.h  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegCurvetoCubicSmooth.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoCubicSmoothAbs final : public SVGPathSegCurvetoCubicSmooth {
-public:
-    static Ref<SVGPathSegCurvetoCubicSmoothAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x2, float y2)
-    {
-        return adoptRef(*new SVGPathSegCurvetoCubicSmoothAbs(element, role, x, y, x2, y2));
-    }
-
-private:
-    SVGPathSegCurvetoCubicSmoothAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x2, float y2)
-        : SVGPathSegCurvetoCubicSmooth(element, role, x, y, x2, y2)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; }
-    String pathSegTypeAsLetter() const final { return "S"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoCubicSmoothRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.h       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.h  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegCurvetoCubicSmooth.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoCubicSmoothRel final : public SVGPathSegCurvetoCubicSmooth {
-public:
-    static Ref<SVGPathSegCurvetoCubicSmoothRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x2, float y2)
-    {
-        return adoptRef(*new SVGPathSegCurvetoCubicSmoothRel(element, role, x, y, x2, y2));
-    }
-
-private:
-    SVGPathSegCurvetoCubicSmoothRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x2, float y2)
-        : SVGPathSegCurvetoCubicSmooth(element, role, x, y, x2, y2)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_SMOOTH_REL; }
-    String pathSegTypeAsLetter() const final { return "s"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoQuadratich"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadratic.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadratic.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadratic.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,73 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoQuadratic : public SVGPathSegWithContext { 
-public:
-    SVGPathSegCurvetoQuadratic(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1)
-        : SVGPathSegWithContext(element, role)
-        , m_x(x)
-        , m_y(y)
-        , m_x1(x1)
-        , m_y1(y1)
-    {
-    }
-
-    float x() const { return m_x; }
-    void setX(float x)
-    {
-        m_x = x;
-        commitChange();
-    }
-
-    float y() const { return m_y; }
-    void setY(float y)
-    {
-        m_y = y;
-        commitChange();
-    }
-
-    float x1() const { return m_x1; }
-    void setX1(float x1)
-    {
-        m_x1 = x1;
-        commitChange();
-    }
-
-    float y1() const { return m_y1; }
-    void setY1(float y1)
-    {
-        m_y1 = y1;
-        commitChange();
-    }
-
-private:
-    float m_x;
-    float m_y;
-    float m_x1;
-    float m_y1;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegCurvetoQuadratic.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoQuadraticAbs final : public SVGPathSegCurvetoQuadratic {
-public:
-    static Ref<SVGPathSegCurvetoQuadraticAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1)
-    {
-        return adoptRef(*new SVGPathSegCurvetoQuadraticAbs(element, role, x, y, x1, y1));
-    }
-
-private:
-    SVGPathSegCurvetoQuadraticAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1)
-        : SVGPathSegCurvetoQuadratic(element, role, x, y, x1, y1)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_ABS; }
-    String pathSegTypeAsLetter() const final { return "Q"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticRel.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticRel.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegCurvetoQuadratic.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoQuadraticRel final : public SVGPathSegCurvetoQuadratic {
-public:
-    static Ref<SVGPathSegCurvetoQuadraticRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1)
-    {
-        return adoptRef(*new SVGPathSegCurvetoQuadraticRel(element, role, x, y, x1, y1));
-    }
-
-private:
-    SVGPathSegCurvetoQuadraticRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y, float x1, float y1)
-        : SVGPathSegCurvetoQuadratic(element, role, x, y, x1, y1)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_REL; }
-    String pathSegTypeAsLetter() const final { return "q"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticSmoothAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoQuadraticSmoothAbs final : public SVGPathSegSingleCoordinate {
-public:
-    static Ref<SVGPathSegCurvetoQuadraticSmoothAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-    {
-        return adoptRef(*new SVGPathSegCurvetoQuadraticSmoothAbs(element, role, x, y));
-    }
-
-private:
-    SVGPathSegCurvetoQuadraticSmoothAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegSingleCoordinate(element, role, x, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; }
-    String pathSegTypeAsLetter() const final { return "T"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegCurvetoQuadraticSmoothRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegCurvetoQuadraticSmoothRel final : public SVGPathSegSingleCoordinate {
-public:
-    static Ref<SVGPathSegCurvetoQuadraticSmoothRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-    {
-        return adoptRef(*new SVGPathSegCurvetoQuadraticSmoothRel(element, role, x, y));
-    }
-
-private:
-    SVGPathSegCurvetoQuadraticSmoothRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegSingleCoordinate(element, role, x, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; }
-    String pathSegTypeAsLetter() const final { return "t"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegImplh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGPathSegImpl.h (0 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegImpl.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGPathSegImpl.h   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -0,0 +1,222 @@
</span><ins>+/*
+ * Copyright (C) 2019 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "SVGPathSegValue.h"
+
+namespace WebCore {
+
+class SVGPathSegClosePath final : public SVGPathSeg {
+public:
+    static Ref<SVGPathSegClosePath> create() { return adoptRef(*new SVGPathSegClosePath()); }
+private:
+    using SVGPathSeg::SVGPathSeg;
+    unsigned short pathSegType() const final { return PATHSEG_CLOSEPATH; }
+    String pathSegTypeAsLetter() const final { return "Z"; }
+    Ref<SVGPathSeg> clone() const final { return adoptRef(*new SVGPathSegClosePath()); }
+};
+
+class SVGPathSegLinetoHorizontalAbs final : public SVGPathSegLinetoHorizontal {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegLinetoHorizontalAbs>;
+private:
+    using SVGPathSegLinetoHorizontal::SVGPathSegLinetoHorizontal;
+    unsigned short pathSegType() const final { return PATHSEG_LINETO_HORIZONTAL_ABS; }
+    String pathSegTypeAsLetter() const final { return "H"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegLinetoHorizontalAbs>(); }
+};
+
+class SVGPathSegLinetoHorizontalRel final : public SVGPathSegLinetoHorizontal {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegLinetoHorizontalRel>;
+private:
+    using SVGPathSegLinetoHorizontal::SVGPathSegLinetoHorizontal;
+    unsigned short pathSegType() const final { return PATHSEG_LINETO_HORIZONTAL_REL; }
+    String pathSegTypeAsLetter() const final { return "h"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegLinetoHorizontalRel>(); }
+};
+
+class SVGPathSegLinetoVerticalAbs final : public SVGPathSegLinetoVertical {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegLinetoVerticalAbs>;
+private:
+    using SVGPathSegLinetoVertical::SVGPathSegLinetoVertical;
+    unsigned short pathSegType() const final { return PATHSEG_LINETO_VERTICAL_ABS; }
+    String pathSegTypeAsLetter() const final { return "V"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegLinetoVerticalAbs>(); }
+};
+
+class SVGPathSegLinetoVerticalRel final : public SVGPathSegLinetoVertical {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegLinetoVerticalRel>;
+private:
+    using SVGPathSegLinetoVertical::SVGPathSegLinetoVertical;
+    unsigned short pathSegType() const final { return PATHSEG_LINETO_VERTICAL_REL; }
+    String pathSegTypeAsLetter() const final { return "v"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegLinetoVerticalRel>(); }
+};
+
+class SVGPathSegMovetoAbs final : public SVGPathSegSingleCoordinate {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegMovetoAbs>;
+private:
+    using SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate;
+    unsigned short pathSegType() const final { return PATHSEG_MOVETO_ABS; }
+    String pathSegTypeAsLetter() const final { return "M"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegMovetoAbs>(); }
+};
+
+class SVGPathSegMovetoRel final : public SVGPathSegSingleCoordinate {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegMovetoRel>;
+private:
+    using SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate;
+    unsigned short pathSegType() const final { return PATHSEG_MOVETO_REL; }
+    String pathSegTypeAsLetter() const final { return "m"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegMovetoRel>(); }
+};
+
+class SVGPathSegLinetoAbs final : public SVGPathSegSingleCoordinate {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegLinetoAbs>;
+private:
+    using SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate;
+    unsigned short pathSegType() const final { return PATHSEG_LINETO_ABS; }
+    String pathSegTypeAsLetter() const final { return "L"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegLinetoAbs>(); }
+};
+
+class SVGPathSegLinetoRel final : public SVGPathSegSingleCoordinate {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegLinetoRel>;
+private:
+    using SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate;
+    unsigned short pathSegType() const final { return PATHSEG_LINETO_REL; }
+    String pathSegTypeAsLetter() const final { return "l"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegLinetoRel>(); }
+};
+
+class SVGPathSegCurvetoQuadraticAbs final : public SVGPathSegCurvetoQuadratic {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoQuadraticAbs>;
+private:
+    using SVGPathSegCurvetoQuadratic::SVGPathSegCurvetoQuadratic;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_ABS; }
+    String pathSegTypeAsLetter() const final { return "Q"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoQuadraticAbs>(); }
+};
+
+class SVGPathSegCurvetoQuadraticRel final : public SVGPathSegCurvetoQuadratic {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoQuadraticRel>;
+private:
+    using SVGPathSegCurvetoQuadratic::SVGPathSegCurvetoQuadratic;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_REL; }
+    String pathSegTypeAsLetter() const final { return "q"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoQuadraticRel>(); }
+};
+
+class SVGPathSegCurvetoCubicAbs final : public SVGPathSegCurvetoCubic {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoCubicAbs>;
+private:
+    using SVGPathSegCurvetoCubic::SVGPathSegCurvetoCubic;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_ABS; }
+    String pathSegTypeAsLetter() const final { return "C"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoCubicAbs>(); }
+};
+
+class SVGPathSegCurvetoCubicRel final : public SVGPathSegCurvetoCubic {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoCubicRel>;
+private:
+    using SVGPathSegCurvetoCubic::SVGPathSegCurvetoCubic;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_REL; }
+    String pathSegTypeAsLetter() const final { return "c"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoCubicRel>(); }
+};
+
+class SVGPathSegArcAbs final : public SVGPathSegArc {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegArcAbs>;
+private:
+    using SVGPathSegArc::SVGPathSegArc;
+    unsigned short pathSegType() const final { return PATHSEG_ARC_ABS; }
+    String pathSegTypeAsLetter() const final { return "A"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegArcAbs>(); }
+};
+
+class SVGPathSegArcRel final : public SVGPathSegArc {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegArcRel>;
+private:
+    using SVGPathSegArc::SVGPathSegArc;
+    unsigned short pathSegType() const final { return PATHSEG_ARC_REL; }
+    String pathSegTypeAsLetter() const final { return "a"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegArcRel>(); }
+};
+
+class SVGPathSegCurvetoQuadraticSmoothAbs final : public SVGPathSegSingleCoordinate {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoQuadraticSmoothAbs>;
+private:
+    using SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; }
+    String pathSegTypeAsLetter() const final { return "T"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoQuadraticSmoothAbs>(); }
+};
+
+class SVGPathSegCurvetoQuadraticSmoothRel final : public SVGPathSegSingleCoordinate {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoQuadraticSmoothRel>;
+private:
+    using SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; }
+    String pathSegTypeAsLetter() const final { return "t"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoQuadraticSmoothRel>(); }
+};
+
+class SVGPathSegCurvetoCubicSmoothAbs final : public SVGPathSegCurvetoCubicSmooth {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoCubicSmoothAbs>;
+private:
+    using SVGPathSegCurvetoCubicSmooth::SVGPathSegCurvetoCubicSmooth;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; }
+    String pathSegTypeAsLetter() const final { return "S"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoCubicSmoothAbs>(); }
+};
+
+class SVGPathSegCurvetoCubicSmoothRel final : public SVGPathSegCurvetoCubicSmooth {
+public:
+    constexpr static auto create = SVGPathSegValue::create<SVGPathSegCurvetoCubicSmoothRel>;
+private:
+    using SVGPathSegCurvetoCubicSmooth::SVGPathSegCurvetoCubicSmooth;
+    unsigned short pathSegType() const final { return PATHSEG_CURVETO_CUBIC_SMOOTH_REL; }
+    String pathSegTypeAsLetter() const final { return "s"; }
+    Ref<SVGPathSeg> clone() const final { return SVGPathSegValue::clone<SVGPathSegCurvetoCubicSmoothRel>(); }
+};
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoAbs.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoAbs.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoAbs final : public SVGPathSegSingleCoordinate {
-public:
-    static Ref<SVGPathSegLinetoAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-    {
-        return adoptRef(*new SVGPathSegLinetoAbs(element, role, x, y));
-    }
-
-private:
-    SVGPathSegLinetoAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegSingleCoordinate(element, role, x, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_LINETO_ABS; }
-    String pathSegTypeAsLetter() const final { return "L"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoHorizontalh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontal.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontal.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontal.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,46 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoHorizontal : public SVGPathSegWithContext {
-public:
-    SVGPathSegLinetoHorizontal(const SVGPathElement& element, SVGPathSegRole role, float x)
-        : SVGPathSegWithContext(element, role)
-        , m_x(x)
-    {
-    }
-
-    float x() const { return m_x; }
-    void setX(float x)
-    {
-        m_x = x;
-        commitChange();
-    }
-
-private:
-    float m_x;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoHorizontalAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalAbs.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalAbs.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegLinetoHorizontal.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoHorizontalAbs final : public SVGPathSegLinetoHorizontal {
-public:
-    static Ref<SVGPathSegLinetoHorizontalAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x)
-    {
-        return adoptRef(*new SVGPathSegLinetoHorizontalAbs(element, role, x));
-    }
-
-private:
-    SVGPathSegLinetoHorizontalAbs(const SVGPathElement& element, SVGPathSegRole role, float x)
-        : SVGPathSegLinetoHorizontal(element, role, x)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_LINETO_HORIZONTAL_ABS; }
-    String pathSegTypeAsLetter() const final { return "H"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoHorizontalRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalRel.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoHorizontalRel.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegLinetoHorizontal.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoHorizontalRel final : public SVGPathSegLinetoHorizontal {
-public:
-    static Ref<SVGPathSegLinetoHorizontalRel> create(const SVGPathElement& element, SVGPathSegRole role, float x)
-    {
-        return adoptRef(*new SVGPathSegLinetoHorizontalRel(element, role, x));
-    }
-
-private:
-    SVGPathSegLinetoHorizontalRel(const SVGPathElement& element, SVGPathSegRole role, float x)
-        : SVGPathSegLinetoHorizontal(element, role, x)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_LINETO_HORIZONTAL_REL; }
-    String pathSegTypeAsLetter() const final { return "h"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoRel.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoRel.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoRel final : public SVGPathSegSingleCoordinate {
-public:
-    static Ref<SVGPathSegLinetoRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-    {
-        return adoptRef(*new SVGPathSegLinetoRel(element, role, x, y));
-    }
-
-private:
-    SVGPathSegLinetoRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegSingleCoordinate(element, role, x, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_LINETO_REL; }
-    String pathSegTypeAsLetter() const final { return "l"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoVerticalh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoVertical.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoVertical.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoVertical.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,46 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoVertical : public SVGPathSegWithContext {
-public:
-    SVGPathSegLinetoVertical(const SVGPathElement& element, SVGPathSegRole role, float y)
-        : SVGPathSegWithContext(element, role)
-        , m_y(y)
-    {
-    }
-
-    float y() const { return m_y; }
-    void setY(float y)
-    {
-        m_y = y;
-        commitChange();
-    }
-
-private:
-    float m_y;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoVerticalAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalAbs.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalAbs.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegLinetoVertical.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoVerticalAbs final : public SVGPathSegLinetoVertical {
-public:
-    static Ref<SVGPathSegLinetoVerticalAbs> create(const SVGPathElement& element, SVGPathSegRole role, float y)
-    {
-        return adoptRef(*new SVGPathSegLinetoVerticalAbs(element, role, y));
-    }
-
-private:
-    SVGPathSegLinetoVerticalAbs(const SVGPathElement& element, SVGPathSegRole role, float y)
-        : SVGPathSegLinetoVertical(element, role, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_LINETO_VERTICAL_ABS; }
-    String pathSegTypeAsLetter() const final { return "V"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegLinetoVerticalRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalRel.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegLinetoVerticalRel.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegLinetoVertical.h"
-
-namespace WebCore {
-
-class SVGPathSegLinetoVerticalRel final : public SVGPathSegLinetoVertical {
-public:
-    static Ref<SVGPathSegLinetoVerticalRel> create(const SVGPathElement& element, SVGPathSegRole role, float y)
-    {
-        return adoptRef(*new SVGPathSegLinetoVerticalRel(element, role, y));
-    }
-
-private:
-    SVGPathSegLinetoVerticalRel(const SVGPathElement& element, SVGPathSegRole role, float y)
-        : SVGPathSegLinetoVertical(element, role, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_LINETO_VERTICAL_REL; }
-    String pathSegTypeAsLetter() const final { return "v"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegList.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegList.cpp      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegList.cpp 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,117 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "SVGPathSegList.h"
-
-#include "SVGAnimatedPathSegListPropertyTearOff.h"
-#include "SVGPathElement.h"
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-ExceptionOr<void> SVGPathSegList::clear()
-{
-    ASSERT(m_values);
-    if (m_values->isEmpty())
-        return { };
-    return Base::clearValues();
-}
-
-ExceptionOr<RefPtr<SVGPathSeg>> SVGPathSegList::getItem(unsigned index)
-{
-    return Base::getItemValues(index);
-}
-
-ExceptionOr<RefPtr<SVGPathSeg>> SVGPathSegList::replaceItem(Ref<SVGPathSeg>&& newItem, unsigned index)
-{
-    if (index < m_values->size())
-        m_values->clearItemContextAndRole(index);
-    return Base::replaceItemValues(WTFMove(newItem), index);
-}
-
-ExceptionOr<RefPtr<SVGPathSeg>> SVGPathSegList::removeItem(unsigned index)
-{
-    if (index < m_values->size())
-        m_values->clearItemContextAndRole(index);
-    auto result = Base::removeItemValues(index);
-    if (result.hasException())
-        return result;
-    return result.releaseReturnValue();
-}
-
-SVGPathElement* SVGPathSegList::contextElement() const
-{
-    SVGElement* contextElement = m_animatedProperty->contextElement();
-    ASSERT(contextElement);
-    return downcast<SVGPathElement>(contextElement);
-}
-
-bool SVGPathSegList::processIncomingListItemValue(const ListItemType& newItem, unsigned* indexToModify)
-{
-    SVGPathSegWithContext* newItemWithContext = static_cast<SVGPathSegWithContext*>(newItem.get());
-    RefPtr<SVGLegacyAnimatedProperty> animatedPropertyOfItem = newItemWithContext->animatedProperty();
-
-    // Alter the role, after calling animatedProperty(), as that may influence the returned animated property.
-    newItemWithContext->setContextAndRole(contextElement(), m_pathSegRole);
-
-    if (!animatedPropertyOfItem)
-        return true;
-
-    // newItem belongs to a SVGPathElement, but its associated SVGAnimatedProperty is not an animated list tear off.
-    // (for example: "pathElement.pathSegList.appendItem(pathElement.createSVGPathSegClosepath())")
-    if (!animatedPropertyOfItem->isAnimatedListTearOff())
-        return true;
-
-    // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
-    // 'newItem' is already living in another list. If it's not our list, synchronize the other lists wrappers after the removal.
-    bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty;
-    RefPtr<SVGAnimatedPathSegListPropertyTearOff> propertyTearOff = static_pointer_cast<SVGAnimatedPathSegListPropertyTearOff>(animatedPropertyOfItem);
-    int indexToRemove = propertyTearOff->findItem(newItem.get());
-
-    // If newItem does not exist in the propertyTearOff baseVal() list, it has to be
-    // in its animVal() list and it has to be animating.
-    if (indexToRemove == -1) {
-        ASSERT(propertyTearOff->isAnimating());
-        ASSERT(propertyTearOff->animVal()->findItem(newItem.get()) != -1);
-        return false;
-    }
-
-    // Do not remove newItem if already in this list at the target index.
-    if (!livesInOtherList && indexToModify && static_cast<unsigned>(indexToRemove) == *indexToModify)
-        return false;
-
-    propertyTearOff->removeItemFromList(indexToRemove, livesInOtherList);
-
-    if (!indexToModify)
-        return true;
-
-    // If the item lived in our list, adjust the insertion index.
-    if (!livesInOtherList) {
-        unsigned& index = *indexToModify;
-        // Spec: If the item is already in this list, note that the index of the item to (replace|insert before) is before the removal of the item.
-        if (static_cast<unsigned>(indexToRemove) < index)
-            --index;
-    }
-
-    return true;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSegList.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegList.h        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegList.h   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</span><del>- * Copyright (C) 2018 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -20,120 +20,200 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include "SVGAnimatedListPropertyTearOff.h"
-#include "SVGPathSegListValues.h"
</del><ins>+#include "Path.h"
+#include "SVGPathByteStream.h"
+#include "SVGPathSeg.h"
+#include "SVGPropertyList.h"
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGPathElement;
</del><ins>+class SVGPathSegList final : public SVGPropertyList<SVGPathSeg> {
+    friend class SVGAnimatedPathSegListAnimator;
+    friend class SVGPathSegListBuilder;
+    friend class SVGPathSegListSource;
</ins><span class="cx"> 
</span><del>-class SVGPathSegList final : public SVGListProperty<SVGPathSegListValues> {
</del><ins>+    using Base = SVGPropertyList<SVGPathSeg>;
+    using Base::Base;
+
</ins><span class="cx"> public:
</span><del>-    using Base = SVGListProperty<SVGPathSegListValues>;
-    using AnimatedListPropertyTearOff = SVGAnimatedListPropertyTearOff<SVGPathSegListValues>;
-    using ListItemType = SVGPropertyTraits<SVGPathSegListValues>::ListItemType;
</del><ins>+    static Ref<SVGPathSegList> create(SVGPropertyOwner* owner, SVGPropertyAccess access)
+    {
+        return adoptRef(*new SVGPathSegList(owner, access));
+    }
</ins><span class="cx"> 
</span><del>-    static Ref<SVGPathSegList> create(AnimatedListPropertyTearOff& animatedProperty, SVGPropertyRole role, SVGPathSegRole pathSegRole, SVGPathSegListValues& values, ListWrapperCache& wrappers)
</del><ins>+    static Ref<SVGPathSegList> create(const SVGPathSegList& other, SVGPropertyAccess access)
</ins><span class="cx">     {
</span><del>-        return adoptRef(*new SVGPathSegList(animatedProperty, role, pathSegRole, values, wrappers));
</del><ins>+        return adoptRef(*new SVGPathSegList(other, access));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static Ref<SVGPathSegList> create(AnimatedListPropertyTearOff& animatedProperty, SVGPropertyRole role, SVGPathSegListValues& values, ListWrapperCache& wrappers)
</del><ins>+    static Ref<SVGPathSegList> create(Ref<SVGPathSeg>&& newItem)
</ins><span class="cx">     {
</span><del>-        ASSERT_NOT_REACHED();
-        return adoptRef(*new SVGPathSegList(animatedProperty, role, PathSegUndefinedRole, values, wrappers));
</del><ins>+        return adoptRef(*new SVGPathSegList(WTFMove(newItem)));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    int findItem(const ListItemType& item) const
</del><ins>+    SVGPathSegList& operator=(const SVGPathSegList& other)
</ins><span class="cx">     {
</span><del>-        ASSERT(m_values);
</del><ins>+        pathByteStreamWillChange();
+        m_pathByteStream = other.pathByteStream();
+        return *this;
+    }
</ins><span class="cx"> 
</span><del>-        unsigned size = m_values->size();
-        for (size_t i = 0; i < size; ++i) {
-            if (item == m_values->at(i))
-                return i;
-        }
</del><ins>+    unsigned numberOfItems() const
+    {
+        const_cast<SVGPathSegList*>(this)->ensureItems();
+        return Base::numberOfItems();
+    }
</ins><span class="cx"> 
</span><del>-        return -1;
</del><ins>+    ExceptionOr<void> clear()
+    {
+        itemsWillChange();
+        return Base::clear();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void removeItemFromList(size_t itemIndex, bool shouldSynchronizeWrappers)
</del><ins>+    ExceptionOr<Ref<SVGPathSeg>> getItem(unsigned index)
</ins><span class="cx">     {
</span><del>-        ASSERT(m_values);
-        ASSERT_WITH_SECURITY_IMPLICATION(itemIndex < m_values->size());
</del><ins>+        ensureItems();
+        return Base::getItem(index);
+    }
</ins><span class="cx"> 
</span><del>-        m_values->remove(itemIndex);
</del><ins>+    ExceptionOr<Ref<SVGPathSeg>> initialize(Ref<SVGPathSeg>&& newItem)
+    {
+        itemsWillChange();
+        return Base::initialize(WTFMove(newItem));
+    }
</ins><span class="cx"> 
</span><del>-        if (shouldSynchronizeWrappers)
-            commitChange();
</del><ins>+    ExceptionOr<Ref<SVGPathSeg>> insertItemBefore(Ref<SVGPathSeg>&& newItem, unsigned index)
+    {
+        ensureItems();
+        itemsWillChange();
+        return Base::insertItemBefore(WTFMove(newItem), index);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // SVGList API
-    ExceptionOr<void> clear();
</del><ins>+    ExceptionOr<Ref<SVGPathSeg>> replaceItem(Ref<SVGPathSeg>&& newItem, unsigned index)
+    {
+        ensureItems();
+        itemsWillChange();
+        return Base::replaceItem(WTFMove(newItem), index);
+    }
</ins><span class="cx"> 
</span><del>-    ExceptionOr<RefPtr<SVGPathSeg>> initialize(Ref<SVGPathSeg>&& newItem)
</del><ins>+    ExceptionOr<Ref<SVGPathSeg>> removeItem(unsigned index)
</ins><span class="cx">     {
</span><del>-        return Base::initializeValues(WTFMove(newItem));
</del><ins>+        ensureItems();
+        itemsWillChange();
+        return Base::removeItem(index);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr<RefPtr<SVGPathSeg>> getItem(unsigned index);
</del><ins>+    ExceptionOr<Ref<SVGPathSeg>> appendItem(Ref<SVGPathSeg>&& newItem)
+    {
+        ensureItems();
+        appendPathSegToPathByteStream(newItem);
+        clearPath();
+        return Base::appendItem(WTFMove(newItem));
+    }
</ins><span class="cx"> 
</span><del>-    ExceptionOr<RefPtr<SVGPathSeg>> insertItemBefore(Ref<SVGPathSeg>&& newItem, unsigned index)
</del><ins>+    const SVGPathByteStream& pathByteStream() const { return const_cast<SVGPathSegList*>(this)->pathByteStream(); }
+    SVGPathByteStream& pathByteStream()
</ins><span class="cx">     {
</span><del>-        return Base::insertItemBeforeValues(WTFMove(newItem), index);
</del><ins>+        ensurePathByteStream();
+        return m_pathByteStream;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr<RefPtr<SVGPathSeg>> replaceItem(Ref<SVGPathSeg>&&, unsigned index);
</del><ins>+    bool parse(const String& value)
+    {
+        pathByteStreamWillChange();
+        return buildSVGPathByteStreamFromString(value, m_pathByteStream, UnalteredParsing);
+    }
</ins><span class="cx"> 
</span><del>-    ExceptionOr<RefPtr<SVGPathSeg>> removeItem(unsigned index);
</del><ins>+    Path path() const
+    {
+        if (!m_path)
+            m_path = buildPathFromByteStream(pathByteStream());
+        return *m_path;
+    }
</ins><span class="cx"> 
</span><del>-    ExceptionOr<RefPtr<SVGPathSeg>> appendItem(Ref<SVGPathSeg>&& newItem)
</del><ins>+    size_t approximateMemoryCost() const
</ins><span class="cx">     {
</span><del>-        return Base::appendItemValues(WTFMove(newItem));
</del><ins>+        // This is an approximation for path memory cost since the path is parsed on demand.
+        size_t pathMemoryCost = (m_pathByteStream.size() / 10) * sizeof(FloatPoint);
+        // We need to account for the memory which is allocated by the m_path.
+        return m_path ? pathMemoryCost + sizeof(*m_path) : pathMemoryCost;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    String valueAsString() const override
+    {
+        String value;
+        buildStringFromByteStream(pathByteStream(), value, UnalteredParsing);
+        return value;
+    }
+
</ins><span class="cx"> private:
</span><del>-    SVGPathSegList(AnimatedListPropertyTearOff& animatedProperty, SVGPropertyRole role, SVGPathSegRole pathSegRole, SVGPathSegListValues& values, ListWrapperCache& wrappers)
-        : SVGListProperty<SVGPathSegListValues>(role, values, &wrappers)
-        , m_animatedProperty(&animatedProperty)
-        , m_pathSegRole(pathSegRole)
</del><ins>+    SVGPathSegList(const SVGPathSegList& other, SVGPropertyAccess access)
+        : Base(other.owner(), access)
+        , m_pathByteStream(other.pathByteStream())
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGPathElement* contextElement() const;
-    using Base::m_role;
</del><ins>+    // Used by appendPathSegToPathByteStream() to create a temporary SVGPathSegList with one item.
+    SVGPathSegList(Ref<SVGPathSeg>&& newItem)
+    {
+        append(WTFMove(newItem));
+    }
</ins><span class="cx"> 
</span><del>-    bool isReadOnly() const final
</del><ins>+    // Called when changing an item in the list.
+    void commitPropertyChange(SVGProperty* property) override
</ins><span class="cx">     {
</span><del>-        if (m_role == AnimValRole)
-            return true;
-        if (m_animatedProperty && m_animatedProperty->isReadOnly())
-            return true;
-        return false;
</del><ins>+        itemsWillChange();
+        Base::commitPropertyChange(property);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void commitChange() final
</del><ins>+    void ensureItems()
</ins><span class="cx">     {
</span><del>-        ASSERT(m_values);
-        m_values->commitChange(*m_animatedProperty->contextElement(), ListModificationUnknown);
</del><ins>+        if (!m_items.isEmpty() || m_pathByteStream.isEmpty())
+            return;
+        buildSVGPathSegListFromByteStream(m_pathByteStream, *this, UnalteredParsing);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void commitChange(ListModification listModification) final
</del><ins>+    void ensurePathByteStream()
</ins><span class="cx">     {
</span><del>-        ASSERT(m_values);
-        m_values->commitChange(*m_animatedProperty->contextElement(), listModification);
</del><ins>+        if (!m_pathByteStream.isEmpty() || m_items.isEmpty())
+            return;
+        buildSVGPathByteStreamFromSVGPathSegList(*this, m_pathByteStream, UnalteredParsing);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool processIncomingListItemValue(const ListItemType& newItem, unsigned* indexToModify) final;
-    bool processIncomingListItemWrapper(Ref<ListItemTearOff>&, unsigned*) final
</del><ins>+    // Optimize appending an SVGPathSeg to the list. Instead of creating the whole
+    // byte stream, a temporary byte stream will be creating just for the new item
+    // and this temporary byte stream will be appended to m_pathByteStream.
+    void appendPathSegToPathByteStream(const Ref<SVGPathSeg>& item)
</ins><span class="cx">     {
</span><del>-        ASSERT_NOT_REACHED();
-        return true;
</del><ins>+        if (m_pathByteStream.isEmpty())
+            return;
+
+        Ref<SVGPathSegList> pathSegList = SVGPathSegList::create(item.copyRef());
+        SVGPathByteStream pathSegStream;
+
+        if (!buildSVGPathByteStreamFromSVGPathSegList(pathSegList, pathSegStream, UnalteredParsing, false))
+            return;
+
+        m_pathByteStream.append(pathSegStream);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-private:
-    RefPtr<AnimatedListPropertyTearOff> m_animatedProperty;
-    SVGPathSegRole m_pathSegRole;
</del><ins>+    void clearPathByteStream() { m_pathByteStream.clear(); }
+    void clearPath() { m_path = WTF::nullopt; }
+
+    void pathByteStreamWillChange()
+    {
+        clearItems();
+        clearPath();
+    }
+
+    void itemsWillChange()
+    {
+        clearPathByteStream();
+        clearPath();
+    }
+
+    SVGPathByteStream m_pathByteStream;
+    mutable Optional<Path> m_path;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-} // namespace WebCore
</del><ins>+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListBuildercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSegListBuilder.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegListBuilder.cpp       2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegListBuilder.cpp  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -4,6 +4,7 @@
</span><span class="cx">  * Copyright (C) 2006, 2007 Rob Buis <buis@kde.org>
</span><span class="cx">  * Copyright (C) 2007, 2009, 2015 Apple Inc. All rights reserved.
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</span><ins>+ * Copyright (C) 2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -24,34 +25,13 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGPathSegListBuilder.h"
</span><span class="cx"> 
</span><del>-#include "SVGPathElement.h"
-#include "SVGPathSegArcAbs.h"
-#include "SVGPathSegArcRel.h"
-#include "SVGPathSegClosePath.h"
-#include "SVGPathSegCurvetoCubicAbs.h"
-#include "SVGPathSegCurvetoCubicRel.h"
-#include "SVGPathSegCurvetoCubicSmoothAbs.h"
-#include "SVGPathSegCurvetoCubicSmoothRel.h"
-#include "SVGPathSegCurvetoQuadraticAbs.h"
-#include "SVGPathSegCurvetoQuadraticRel.h"
-#include "SVGPathSegCurvetoQuadraticSmoothAbs.h"
-#include "SVGPathSegCurvetoQuadraticSmoothRel.h"
-#include "SVGPathSegLinetoAbs.h"
-#include "SVGPathSegLinetoHorizontalAbs.h"
-#include "SVGPathSegLinetoHorizontalRel.h"
-#include "SVGPathSegLinetoRel.h"
-#include "SVGPathSegLinetoVerticalAbs.h"
-#include "SVGPathSegLinetoVerticalRel.h"
-#include "SVGPathSegListValues.h"
-#include "SVGPathSegMovetoAbs.h"
-#include "SVGPathSegMovetoRel.h"
</del><ins>+#include "SVGPathSegImpl.h"
+#include "SVGPathSegList.h"
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-SVGPathSegListBuilder::SVGPathSegListBuilder(SVGPathElement& pathElement, SVGPathSegListValues& pathSegList, SVGPathSegRole role)
-    : m_pathElement(pathElement)
-    , m_pathSegList(pathSegList)
-    , m_pathSegRole(role)
</del><ins>+SVGPathSegListBuilder::SVGPathSegListBuilder(SVGPathSegList& pathSegList)
+    : m_pathSegList(pathSegList)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -58,78 +38,78 @@
</span><span class="cx"> void SVGPathSegListBuilder::moveTo(const FloatPoint& targetPoint, bool, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegMovetoAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegMovetoAbs::create(targetPoint.x(), targetPoint.y()));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegMovetoRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegMovetoRel::create(targetPoint.x(), targetPoint.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegLinetoAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegLinetoAbs::create(targetPoint.x(), targetPoint.y()));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegLinetoRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegLinetoRel::create(targetPoint.x(), targetPoint.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::lineToHorizontal(float x, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegLinetoHorizontalAbs(x, m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegLinetoHorizontalAbs::create(x));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegLinetoHorizontalRel(x, m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegLinetoHorizontalRel::create(x));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::lineToVertical(float y, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegLinetoVerticalAbs(y, m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegLinetoVerticalAbs::create(y));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegLinetoVerticalRel(y, m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegLinetoVerticalRel::create(y));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::curveToCubic(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoCubicAbs::create(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y()));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoCubicRel::create(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::curveToCubicSmooth(const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicSmoothAbs(targetPoint.x(), targetPoint.y(), point2.x(), point2.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoCubicSmoothAbs::create(targetPoint.x(), targetPoint.y(), point2.x(), point2.y()));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicSmoothRel(targetPoint.x(), targetPoint.y(), point2.x(), point2.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoCubicSmoothRel::create(targetPoint.x(), targetPoint.y(), point2.x(), point2.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::curveToQuadratic(const FloatPoint& point1, const FloatPoint& targetPoint, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoQuadraticAbs::create(targetPoint.x(), targetPoint.y(), point1.x(), point1.y()));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoQuadraticRel::create(targetPoint.x(), targetPoint.y(), point1.x(), point1.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticSmoothAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoQuadraticSmoothAbs::create(targetPoint.x(), targetPoint.y()));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticSmoothRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegCurvetoQuadraticSmoothRel::create(targetPoint.x(), targetPoint.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::arcTo(float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == AbsoluteCoordinates)
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegArcAbs(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag, m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegArcAbs::create(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag));
</ins><span class="cx">     else
</span><del>-        m_pathSegList.append(m_pathElement.createSVGPathSegArcRel(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag, m_pathSegRole));
</del><ins>+        m_pathSegList.append(SVGPathSegArcRel::create(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGPathSegListBuilder::closePath()
</span><span class="cx"> {
</span><del>-    m_pathSegList.append(m_pathElement.createSVGPathSegClosePath(m_pathSegRole));
</del><ins>+    m_pathSegList.append(SVGPathSegClosePath::create());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSegListBuilder.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegListBuilder.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegListBuilder.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -4,6 +4,7 @@
</span><span class="cx">  * Copyright (C) 2006, 2007 Rob Buis <buis@kde.org>
</span><span class="cx">  * Copyright (C) 2007, 2009, 2015 Apple Inc. All rights reserved.
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</span><ins>+ * Copyright (C) 2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -25,15 +26,14 @@
</span><span class="cx"> 
</span><span class="cx"> #include "FloatPoint.h"
</span><span class="cx"> #include "SVGPathConsumer.h"
</span><del>-#include "SVGPathSegListValues.h"
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGPathElement;
</del><ins>+class SVGPathSegList;
</ins><span class="cx"> 
</span><span class="cx"> class SVGPathSegListBuilder final : public SVGPathConsumer {
</span><span class="cx"> public:
</span><del>-    SVGPathSegListBuilder(SVGPathElement&, SVGPathSegListValues&, SVGPathSegRole);
</del><ins>+    SVGPathSegListBuilder(SVGPathSegList&);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     void incrementPathSegmentCount() final { }
</span><span class="lines">@@ -53,9 +53,7 @@
</span><span class="cx">     void curveToQuadraticSmooth(const FloatPoint&, PathCoordinateMode) final;
</span><span class="cx">     void arcTo(float, float, float, bool largeArcFlag, bool sweepFlag, const FloatPoint&, PathCoordinateMode) final;
</span><span class="cx"> 
</span><del>-    SVGPathElement& m_pathElement;
-    SVGPathSegListValues& m_pathSegList;
-    SVGPathSegRole m_pathSegRole { PathSegUndefinedRole };
</del><ins>+    SVGPathSegList& m_pathSegList;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSegListSource.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegListSource.cpp        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegListSource.cpp   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</span><ins>+ * Copyright (C) 2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -20,16 +21,13 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGPathSegListSource.h"
</span><span class="cx"> 
</span><del>-#include "SVGPathSegArc.h"
-#include "SVGPathSegCurvetoCubic.h"
-#include "SVGPathSegCurvetoCubicSmooth.h"
-#include "SVGPathSegCurvetoQuadratic.h"
-#include "SVGPathSegLinetoHorizontal.h"
-#include "SVGPathSegLinetoVertical.h"
</del><ins>+#include "SVGPathSeg.h"
+#include "SVGPathSegList.h"
+#include "SVGPathSegValue.h"
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-SVGPathSegListSource::SVGPathSegListSource(const SVGPathSegListValues& pathSegList)
</del><ins>+SVGPathSegListSource::SVGPathSegListSource(const SVGPathSegList& pathSegList)
</ins><span class="cx">     : m_pathSegList(pathSegList)
</span><span class="cx"> {
</span><span class="cx">     m_itemCurrent = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSegListSource.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegListSource.h  2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegListSource.h     2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</span><ins>+ * Copyright (C) 2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -21,15 +22,16 @@
</span><span class="cx"> 
</span><span class="cx"> #include "FloatPoint.h"
</span><span class="cx"> #include "SVGPathSeg.h"
</span><del>-#include "SVGPathSegListValues.h"
</del><span class="cx"> #include "SVGPathSource.h"
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class SVGPathSegList;
+
</ins><span class="cx"> class SVGPathSegListSource final : public SVGPathSource {
</span><span class="cx"> public:
</span><del>-    explicit SVGPathSegListSource(const SVGPathSegListValues&);
</del><ins>+    explicit SVGPathSegListSource(const SVGPathSegList&);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     bool hasMoreData() const final;
</span><span class="lines">@@ -47,10 +49,10 @@
</span><span class="cx">     bool parseCurveToQuadraticSmoothSegment(FloatPoint&) final;
</span><span class="cx">     bool parseArcToSegment(float&, float&, float&, bool&, bool&, FloatPoint&) final;
</span><span class="cx"> 
</span><del>-    const SVGPathSegListValues& m_pathSegList;
</del><ins>+    const SVGPathSegList& m_pathSegList;
</ins><span class="cx">     RefPtr<SVGPathSeg> m_segment;
</span><del>-    int m_itemCurrent;
-    int m_itemEnd;
</del><ins>+    size_t m_itemCurrent;
+    size_t m_itemEnd;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListValuescpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegListValues.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegListValues.cpp        2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegListValues.cpp   2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,58 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "SVGPathSegListValues.h"
-
-#include "SVGPathElement.h"
-#include "SVGPathSegWithContext.h"
-#include "SVGPathUtilities.h"
-
-namespace WebCore {
-
-String SVGPathSegListValues::valueAsString() const
-{
-    String pathString;
-    buildStringFromSVGPathSegListValues(*this, pathString, UnalteredParsing);
-    return pathString;
-}
-
-void SVGPathSegListValues::commitChange(SVGElement& contextElement, ListModification listModification)
-{
-    downcast<SVGPathElement>(contextElement).pathSegListChanged(m_role, listModification);
-}
-
-void SVGPathSegListValues::clearItemContextAndRole(unsigned index)
-{
-    auto& item = at(index);
-    static_cast<SVGPathSegWithContext&>(*item).setContextAndRole(nullptr, PathSegUndefinedRole);
-}
-    
-void SVGPathSegListValues::clearContextAndRoles()
-{
-    auto count = size();
-    while (count--)
-        clearItemContextAndRole(count);
-}
-    
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListValuesh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegListValues.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegListValues.h  2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegListValues.h     2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,87 +0,0 @@
</span><del>-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGListProperty.h"
-#include "SVGPathSeg.h"
-#include "SVGPropertyTraits.h"
-#include <wtf/Vector.h>
-#include <wtf/text/WTFString.h>
-
-namespace WebCore {
-
-class SVGElement;
-class SVGPathSegList;
-
-template<typename T> 
-class SVGPropertyTearOff;
-
-class SVGPathSegListValues : public Vector<RefPtr<SVGPathSeg>> {
-public:
-    using Base = Vector<RefPtr<SVGPathSeg>>;
-    
-    explicit SVGPathSegListValues(SVGPathSegRole role)
-        : m_role(role)
-    {
-    }
-    
-    SVGPathSegListValues(const SVGPathSegListValues&) = default;
-    SVGPathSegListValues(SVGPathSegListValues&&) = default;
-    
-    SVGPathSegListValues& operator=(const SVGPathSegListValues& other)
-    {
-        clearContextAndRoles();
-        return static_cast<SVGPathSegListValues&>(Base::operator=(other));
-    }
-
-    SVGPathSegListValues& operator=(SVGPathSegListValues&& other)
-    {
-        clearContextAndRoles();
-        return static_cast<SVGPathSegListValues&>(Base::operator=(WTFMove(other)));
-    }
-    
-    void clear()
-    {
-        clearContextAndRoles();
-        Base::clear();
-    }
-
-    String valueAsString() const;
-
-    void commitChange(SVGElement& contextElement, ListModification);
-    void clearItemContextAndRole(unsigned index);
-
-private:
-    void clearContextAndRoles();
-
-    SVGPathSegRole m_role;
-};
-
-template<> struct SVGPropertyTraits<SVGPathSegListValues> {
-    static SVGPathSegListValues initialValue() { return SVGPathSegListValues(PathSegUndefinedRole); }
-    static String toString(const SVGPathSegListValues& list) { return list.valueAsString(); }
-
-    using ListItemType = RefPtr<SVGPathSeg>;
-    using ListItemTearOff = SVGPropertyTearOff<RefPtr<SVGPathSeg>>;
-    using ListPropertyTearOff = SVGPathSegList;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegMovetoAbsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegMovetoAbs.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegMovetoAbs.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegMovetoAbs.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegMovetoAbs final : public SVGPathSegSingleCoordinate {
-public:
-    static Ref<SVGPathSegMovetoAbs> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-    {
-        return adoptRef(*new SVGPathSegMovetoAbs(element, role, x, y));
-    }
-
-private:
-    SVGPathSegMovetoAbs(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegSingleCoordinate(element, role, x, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_MOVETO_ABS; }
-    String pathSegTypeAsLetter() const final { return "M"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegMovetoRelh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegMovetoRel.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegMovetoRel.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegMovetoRel.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,45 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis@kde.org>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathSegWithContext.h"
-
-namespace WebCore {
-
-class SVGPathSegMovetoRel final : public SVGPathSegSingleCoordinate {
-public:
-    static Ref<SVGPathSegMovetoRel> create(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-    {
-        return adoptRef(*new SVGPathSegMovetoRel(element, role, x, y));
-    }
-
-private:
-    SVGPathSegMovetoRel(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegSingleCoordinate(element, role, x, y)
-    {
-    }
-
-    unsigned short pathSegType() const final { return PATHSEG_MOVETO_REL; }
-    String pathSegTypeAsLetter() const final { return "m"; }
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegValueh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGPathSegValue.h (0 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegValue.h                               (rev 0)
+++ trunk/Source/WebCore/svg/SVGPathSegValue.h  2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -0,0 +1,191 @@
</span><ins>+/*
+ * Copyright (C) 2019 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "SVGPathSeg.h"
+
+namespace WebCore {
+
+template<class... Arguments>
+class SVGPathSegValue : public SVGPathSeg {
+public:
+    template<typename PathSegType>
+    static Ref<PathSegType> create(Arguments... arguments)
+    {
+        return adoptRef(*new PathSegType(std::forward<Arguments>(arguments)...));
+    }
+
+    template<typename PathSegType>
+    Ref<PathSegType> clone() const
+    {
+        return adoptRef(*new PathSegType(m_arguments));
+    }
+
+    SVGPathSegValue(Arguments... arguments)
+        : m_arguments(std::forward<Arguments>(arguments)...)
+    {
+    }
+
+    SVGPathSegValue(const std::tuple<Arguments...>& arguments)
+        : m_arguments(arguments)
+    {
+    }
+
+protected:
+    template<size_t I>
+    const auto& argument() const
+    {
+        return std::get<I>(m_arguments);
+    }
+
+    template<size_t I, typename ArgumentValue>
+    void setArgument(ArgumentValue value)
+    {
+        std::get<I>(m_arguments) = value;
+        commitChange();
+    }
+
+    std::tuple<Arguments...> m_arguments;
+};
+
+class SVGPathSegLinetoHorizontal : public SVGPathSegValue<float> {
+public:
+    float x() const { return argument<0>(); }
+    void setX(float x) { setArgument<0>(x); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+class SVGPathSegLinetoVertical : public SVGPathSegValue<float> {
+public:
+    float y() const { return argument<0>(); }
+    void setY(float x) { setArgument<0>(x); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+class SVGPathSegSingleCoordinate : public SVGPathSegValue<float, float> {
+public:
+    float x() const { return argument<0>(); }
+    void setX(float x) { setArgument<0>(x); }
+
+    float y() const { return argument<1>(); }
+    void setY(float y) { setArgument<1>(y); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+class SVGPathSegCurvetoQuadratic : public SVGPathSegValue<float, float, float, float> {
+public:
+    float x() const { return argument<0>(); }
+    void setX(float x) { setArgument<0>(x); }
+
+    float y() const { return argument<1>(); }
+    void setY(float y) { setArgument<1>(y); }
+
+    float x1() const { return argument<2>(); }
+    void setX1(float x) { setArgument<2>(x); }
+
+    float y1() const { return argument<3>(); }
+    void setY1(float y) { setArgument<3>(y); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+class SVGPathSegCurvetoCubicSmooth : public SVGPathSegValue<float, float, float, float> {
+public:
+    float x() const { return argument<0>(); }
+    void setX(float x) { setArgument<0>(x); }
+
+    float y() const { return argument<1>(); }
+    void setY(float y) { setArgument<1>(y); }
+
+    float x2() const { return argument<2>(); }
+    void setX2(float x) { setArgument<2>(x); }
+
+    float y2() const { return argument<3>(); }
+    void setY2(float y) { setArgument<3>(y); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+class SVGPathSegCurvetoCubic : public SVGPathSegValue<float, float, float, float, float, float> {
+public:
+    float x() const { return argument<0>(); }
+    void setX(float x) { setArgument<0>(x); }
+
+    float y() const { return argument<1>(); }
+    void setY(float y) { setArgument<1>(y); }
+
+    float x1() const { return argument<2>(); }
+    void setX1(float x) { setArgument<2>(x); }
+
+    float y1() const { return argument<3>(); }
+    void setY1(float y) { setArgument<3>(y); }
+
+    float x2() const { return argument<4>(); }
+    void setX2(float x) { setArgument<4>(x); }
+
+    float y2() const { return argument<5>(); }
+    void setY2(float y) { setArgument<5>(y); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+class SVGPathSegArc : public SVGPathSegValue<float, float, float, float, float, bool, bool> {
+public:
+    float x() const { return argument<0>(); }
+    void setX(float x) { setArgument<0>(x); }
+
+    float y() const { return argument<1>(); }
+    void setY(float y) { setArgument<1>(y); }
+
+    float r1() const { return argument<2>(); }
+    void setR1(float r1) { setArgument<2>(r1); }
+
+    float r2() const { return argument<3>(); }
+    void setR2(float r2) { setArgument<3>(r2); }
+
+    float angle() const { return argument<4>(); }
+    void setAngle(float angle) { setArgument<4>(angle); }
+
+    bool largeArcFlag() const { return argument<5>(); }
+    void setLargeArcFlag(bool largeArcFlag) { setArgument<5>(largeArcFlag); }
+
+    bool sweepFlag() const { return argument<6>(); }
+    void setSweepFlag(bool sweepFlag) { setArgument<6>(sweepFlag); }
+
+private:
+    using SVGPathSegValue::SVGPathSegValue;
+};
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegWithContexth"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGPathSegWithContext.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegWithContext.h 2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathSegWithContext.h    2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,103 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGPathElement.h"
-
-namespace WebCore {
-
-class SVGPathSegWithContext : public SVGPathSeg {
-public:
-    SVGPathSegWithContext(const SVGPathElement& element, SVGPathSegRole role)
-        : m_role(role)
-        , m_element(makeWeakPtr(const_cast<SVGPathElement&>(element)))
-    {
-    }
-
-    RefPtr<SVGLegacyAnimatedProperty> animatedProperty() const
-    {
-        if (!m_element)
-            return nullptr;
-
-        switch (m_role) {
-        case PathSegUndefinedRole:
-            return nullptr;
-        case PathSegUnalteredRole:
-            return m_element->pathSegListAnimated();
-        case PathSegNormalizedRole:
-            // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
-            return nullptr;
-        };
-
-        return nullptr;
-    }
-
-    SVGPathElement* contextElement() const { return m_element.get(); }
-    SVGPathSegRole role() const { return m_role; }
-
-    void setContextAndRole(SVGPathElement* element, SVGPathSegRole role)
-    {
-        m_role = role;
-        m_element = makeWeakPtr(element);
-    }
-
-protected:
-    void commitChange()
-    {
-        if (!m_element || m_role == PathSegUndefinedRole)
-            return;
-        m_element->pathSegListChanged(m_role);
-    }
-
-private:
-    SVGPathSegRole m_role;
-    WeakPtr<SVGPathElement> m_element;
-};
-
-class SVGPathSegSingleCoordinate : public SVGPathSegWithContext { 
-public:
-    float x() const { return m_x; }
-    void setX(float x)
-    {
-        m_x = x;
-        commitChange();
-    }
-
-    float y() const { return m_y; }
-    void setY(float y)
-    {
-        m_y = y;
-        commitChange();
-    }
-
-protected:
-    SVGPathSegSingleCoordinate(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
-        : SVGPathSegWithContext(element, role)
-        , m_x(x)
-        , m_y(y)
-    {
-    }
-
-private:
-    float m_x;
-    float m_y;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathUtilitiescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathUtilities.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathUtilities.cpp    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathUtilities.cpp       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -104,34 +104,16 @@
</span><span class="cx">     return builder.toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool buildSVGPathByteStreamFromSVGPathSegListValues(const SVGPathSegListValues& list, SVGPathByteStream& result, PathParsingMode parsingMode)
</del><ins>+bool buildSVGPathByteStreamFromSVGPathSegList(const SVGPathSegList& list, SVGPathByteStream& stream, PathParsingMode parsingMode, bool checkForInitialMoveTo)
</ins><span class="cx"> {
</span><del>-    result.clear();
</del><ins>+    stream.clear();
</ins><span class="cx">     if (list.isEmpty())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><span class="cx">     SVGPathSegListSource source(list);
</span><del>-    return SVGPathParser::parseToByteStream(source, result, parsingMode);
</del><ins>+    return SVGPathParser::parseToByteStream(source, stream, parsingMode, checkForInitialMoveTo);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool appendSVGPathByteStreamFromSVGPathSeg(RefPtr<SVGPathSeg>&& pathSeg, SVGPathByteStream& result, PathParsingMode parsingMode)
-{
-    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
-    ASSERT(parsingMode == UnalteredParsing);
-
-    SVGPathSegListValues appendedItemList(PathSegUnalteredRole);
-    appendedItemList.append(WTFMove(pathSeg));
-
-    SVGPathByteStream appendedByteStream;
-    SVGPathSegListSource source(appendedItemList);
-    bool ok = SVGPathParser::parseToByteStream(source, result, parsingMode, false);
-
-    if (ok)
-        result.append(appendedByteStream);
-
-    return ok;
-}
-
</del><span class="cx"> Path buildPathFromByteStream(const SVGPathByteStream& stream)
</span><span class="cx"> {
</span><span class="cx">     if (stream.isEmpty())
</span><span class="lines">@@ -144,35 +126,25 @@
</span><span class="cx">     return path;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool buildSVGPathSegListValuesFromByteStream(const SVGPathByteStream& stream, SVGPathElement& element, SVGPathSegListValues& result, PathParsingMode parsingMode)
</del><ins>+bool buildSVGPathSegListFromByteStream(const SVGPathByteStream& stream, SVGPathSegList& list, PathParsingMode mode)
</ins><span class="cx"> {
</span><span class="cx">     if (stream.isEmpty())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><del>-    SVGPathSegListBuilder builder(element, result, parsingMode == NormalizedParsing ? PathSegNormalizedRole : PathSegUnalteredRole);
</del><ins>+    SVGPathSegListBuilder builder(list);
</ins><span class="cx">     SVGPathByteStreamSource source(stream);
</span><del>-    return SVGPathParser::parse(source, builder, parsingMode);
</del><ins>+    return SVGPathParser::parse(source, builder, mode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool buildStringFromByteStream(const SVGPathByteStream& stream, String& result, PathParsingMode parsingMode)
</del><ins>+bool buildStringFromByteStream(const SVGPathByteStream& stream, String& result, PathParsingMode parsingMode, bool checkForInitialMoveTo)
</ins><span class="cx"> {
</span><span class="cx">     if (stream.isEmpty())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><span class="cx">     SVGPathByteStreamSource source(stream);
</span><del>-    return SVGPathParser::parseToString(source, result, parsingMode);
</del><ins>+    return SVGPathParser::parseToString(source, result, parsingMode, checkForInitialMoveTo);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool buildStringFromSVGPathSegListValues(const SVGPathSegListValues& list, String& result, PathParsingMode parsingMode)
-{
-    result = String();
-    if (list.isEmpty())
-        return true;
-
-    SVGPathSegListSource source(list);
-    return SVGPathParser::parseToString(source, result, parsingMode);
-}
-
</del><span class="cx"> bool buildSVGPathByteStreamFromString(const String& d, SVGPathByteStream& result, PathParsingMode parsingMode)
</span><span class="cx"> {
</span><span class="cx">     result.clear();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathUtilitiesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathUtilities.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathUtilities.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGPathUtilities.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) Research In Motion Limited 2010, 2012. All rights reserved.
</span><del>- * Copyright (C) 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="cx">  * modify it under the terms of the GNU Library General Public
</span><span class="lines">@@ -28,28 +28,25 @@
</span><span class="cx"> class FloatPoint;
</span><span class="cx"> class Path;
</span><span class="cx"> class SVGPathByteStream;
</span><del>-class SVGPathElement;
</del><span class="cx"> class SVGPathSeg;
</span><del>-class SVGPathSegListValues;
</del><ins>+class SVGPathSegList;
</ins><span class="cx"> 
</span><ins>+// Path -> String
+String buildStringFromPath(const Path&);
+
</ins><span class="cx"> // String/SVGPathByteStream -> Path
</span><span class="cx"> Path buildPathFromString(const String&);
</span><span class="cx"> Path buildPathFromByteStream(const SVGPathByteStream&);
</span><span class="cx"> 
</span><del>-// Path -> String
-String buildStringFromPath(const Path&);
-
-// SVGPathSegListValues/String -> SVGPathByteStream
-bool buildSVGPathByteStreamFromSVGPathSegListValues(const SVGPathSegListValues&, SVGPathByteStream& result, PathParsingMode);
-bool appendSVGPathByteStreamFromSVGPathSeg(RefPtr<SVGPathSeg>&&, SVGPathByteStream&, PathParsingMode);
</del><ins>+// SVGPathSegList/String -> SVGPathByteStream
+bool buildSVGPathByteStreamFromSVGPathSegList(const SVGPathSegList&, SVGPathByteStream& result, PathParsingMode, bool checkForInitialMoveTo = true);
</ins><span class="cx"> bool buildSVGPathByteStreamFromString(const String&, SVGPathByteStream&, PathParsingMode);
</span><span class="cx"> 
</span><del>-// SVGPathByteStream/SVGPathSegListValues -> String
-bool buildStringFromByteStream(const SVGPathByteStream&, String&, PathParsingMode);
-bool buildStringFromSVGPathSegListValues(const SVGPathSegListValues&, String&, PathParsingMode);
</del><ins>+// SVGPathByteStream -> String
+bool buildStringFromByteStream(const SVGPathByteStream&, String&, PathParsingMode, bool checkForInitialMoveTo = true);
</ins><span class="cx"> 
</span><del>-// SVGPathByteStream -> SVGPathSegListValues
-bool buildSVGPathSegListValuesFromByteStream(const SVGPathByteStream&, SVGPathElement&, SVGPathSegListValues&, PathParsingMode);
</del><ins>+// SVGPathByteStream -> SVGPathSegList
+bool buildSVGPathSegListFromByteStream(const SVGPathByteStream&, SVGPathSegList&, PathParsingMode);
</ins><span class="cx"> 
</span><span class="cx"> bool canBlendSVGPathByteStreams(const SVGPathByteStream& from, const SVGPathByteStream& to);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGValue.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGValue.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/SVGValue.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -25,7 +25,6 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include "SVGPathByteStream.h"
</del><span class="cx"> #include "SVGTransformListValues.h"
</span><span class="cx"> 
</span><span class="cx"> #include <wtf/Variant.h>
</span><span class="lines">@@ -33,7 +32,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> using SVGValueVariant = Variant<
</span><del>-    SVGPathByteStream*,
</del><span class="cx">     SVGTransformListValues*
</span><span class="cx"> >;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPathSegListPropertyTearOffcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,61 +0,0 @@
</span><del>-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SVGAnimatedPathSegListPropertyTearOff.h"
-
-#include "SVGPathElement.h"
-
-namespace WebCore {
-
-SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType, SVGPathSegListValues& values)
-    : Base(contextElement, attributeName, animatedPropertyType, values)
-{
-    ASSERT(contextElement);
-    ASSERT(is<SVGPathElement>(contextElement));
-}
-
-SVGAnimatedPathSegListPropertyTearOff::~SVGAnimatedPathSegListPropertyTearOff()
-{
-    downcast<SVGPathElement>(contextElement())->animatedPropertyWillBeDeleted();
-}
-
-void SVGAnimatedPathSegListPropertyTearOff::animValDidChange()
-{
-    ASSERT(m_animatedPathByteStream);
-    auto pathElement = makeRefPtr(downcast<SVGPathElement>(contextElement()));
-
-    // If the animVal is observed from JS, we have to update it on each animation step.
-    // This is an expensive operation and only done if someone actually observes the animatedPathSegList() while an animation is running.
-    if (pathElement->isAnimValObserved()) {
-        auto& animatedList = currentAnimatedValue();
-        animatedList.clear();
-        buildSVGPathSegListValuesFromByteStream(*m_animatedPathByteStream, *pathElement, animatedList, UnalteredParsing);
-    }
-
-    Base::animValDidChange();
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPathSegListPropertyTearOffh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -1,101 +0,0 @@
</span><del>-/*
- * Copyright (C) Research In Motion Limited 2010, 2012. All rights reserved.
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "SVGAnimatedListPropertyTearOff.h"
-#include "SVGPathByteStream.h"
-#include "SVGPathSegList.h"
-#include "SVGPathUtilities.h"
-
-namespace WebCore {
-
-class SVGAnimatedPathSegListPropertyTearOff final : public SVGAnimatedListPropertyTearOff<SVGPathSegListValues> {
-public:
-    using Base = SVGAnimatedListPropertyTearOff<SVGPathSegListValues>;
-
-    static Ref<SVGAnimatedPathSegListPropertyTearOff> create(SVGElement* contextElement, const QualifiedName& attributeName, AnimatedPropertyType animatedPropertyType, SVGPathSegListValues& values)
-    {
-        ASSERT(contextElement);
-        return adoptRef(*new SVGAnimatedPathSegListPropertyTearOff(contextElement, attributeName, animatedPropertyType, values));
-    }
-
-    Ref<ListPropertyTearOff> baseVal() final
-    {
-        if (m_baseVal)
-            return *static_cast<ListPropertyTearOff*>(m_baseVal.get());
-
-        auto property = SVGPathSegList::create(*this, BaseValRole, PathSegUnalteredRole, m_values, m_wrappers);
-        m_baseVal = makeWeakPtr(property.get());
-        return property;
-    }
-
-    Ref<ListPropertyTearOff> animVal() final
-    {
-        if (m_animVal)
-            return *static_cast<ListPropertyTearOff*>(m_animVal.get());
-
-        auto property = SVGPathSegList::create(*this, AnimValRole, PathSegUnalteredRole, m_values, m_wrappers);
-        m_animVal = makeWeakPtr(property.get());
-        return property;
-    }
-
-    int findItem(const RefPtr<SVGPathSeg>& segment)
-    {
-        return baseVal()->findItem(segment);
-    }
-
-    void removeItemFromList(size_t itemIndex, bool shouldSynchronizeWrappers)
-    {
-        baseVal()->removeItemFromList(itemIndex, shouldSynchronizeWrappers);
-    }
-
-    using Base::animationStarted;
-    void animationStarted(SVGPathByteStream* byteStream, const SVGPathSegListValues* baseValue)
-    {
-        ASSERT(byteStream);
-        ASSERT(baseValue);
-        ASSERT(!m_animatedPathByteStream);
-        m_animatedPathByteStream = byteStream;
-
-        // Pass shouldOwnValues=true, as the SVGPathSegListValues lifetime is solely managed by its tear off class.
-        auto* copy = new SVGPathSegListValues(*baseValue);
-        Base::animationStarted(copy, true);
-    }
-
-    void animationEnded()
-    {
-        ASSERT(m_animatedPathByteStream);
-        m_animatedPathByteStream = nullptr;
-        Base::animationEnded();
-    }
-
-    void animValDidChange();
-
-    SVGPathByteStream* animatedPathByteStream() const { return m_animatedPathByteStream; }
-
-private:
-    SVGAnimatedPathSegListPropertyTearOff(SVGElement*, const QualifiedName&, AnimatedPropertyType, SVGPathSegListValues&);
-    virtual ~SVGAnimatedPathSegListPropertyTearOff();
-
-    SVGPathByteStream* m_animatedPathByteStream { nullptr };
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAccessorImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAccessorImpl.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAccessorImpl.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAccessorImpl.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -200,6 +200,28 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template<typename OwnerType>
</span><ins>+class SVGAnimatedPathSegListAccessor final : public SVGAnimatedPropertyAccessor<OwnerType, SVGAnimatedPathSegList> {
+    using Base = SVGAnimatedPropertyAccessor<OwnerType, SVGAnimatedPathSegList>;
+    using Base::property;
+
+public:
+    using Base::Base;
+    template<Ref<SVGAnimatedPathSegList> OwnerType::*property>
+    constexpr static const SVGMemberAccessor<OwnerType>& singleton() { return Base::template singleton<SVGAnimatedPathSegListAccessor, property>(); }
+
+private:
+    std::unique_ptr<SVGAttributeAnimator> createAnimator(OwnerType& owner, const QualifiedName& attributeName, AnimationMode animationMode, CalcMode calcMode, bool isAccumulated, bool isAdditive) const final
+    {
+        return SVGAnimatedPathSegListAnimator::create(attributeName, property(owner), animationMode, calcMode, isAccumulated, isAdditive);
+    }
+
+    void appendAnimatedInstance(OwnerType& owner, SVGAttributeAnimator& animator) const final
+    {
+        static_cast<SVGAnimatedPathSegListAnimator&>(animator).appendAnimatedInstance(property(owner));
+    }
+};
+
+template<typename OwnerType>
</ins><span class="cx"> class SVGAnimatedPointListAccessor final : public SVGAnimatedPropertyAccessor<OwnerType, SVGAnimatedPointList> {
</span><span class="cx">     using Base = SVGAnimatedPropertyAccessor<OwnerType, SVGAnimatedPointList>;
</span><span class="cx">     using Base::property;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyAnimatorImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyAnimatorImpl.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -188,7 +188,7 @@
</span><span class="cx"> public:
</span><span class="cx">     static auto create(const QualifiedName& attributeName, Ref<SVGAnimatedNumberList>& animated, AnimationMode animationMode, CalcMode calcMode, bool isAccumulated, bool isAdditive)
</span><span class="cx">     {
</span><del>-        return std::unique_ptr<SVGAnimatedNumberListAnimator>(new SVGAnimatedNumberListAnimator(attributeName, animated, animationMode, calcMode, isAccumulated, isAdditive));
</del><ins>+        return std::make_unique<SVGAnimatedNumberListAnimator>(attributeName, animated, animationMode, calcMode, isAccumulated, isAdditive);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="lines">@@ -197,7 +197,25 @@
</span><span class="cx">         m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal());
</span><span class="cx">     }
</span><span class="cx"> };
</span><del>-    
</del><ins>+
+class SVGAnimatedPathSegListAnimator final : public SVGAnimatedPropertyAnimator<SVGAnimatedPathSegList, SVGAnimationPathSegListFunction> {
+    using Base = SVGAnimatedPropertyAnimator<SVGAnimatedPathSegList, SVGAnimationPathSegListFunction>;
+    using Base::Base;
+
+public:
+    static auto create(const QualifiedName& attributeName, Ref<SVGAnimatedPathSegList>& animated, AnimationMode animationMode, CalcMode calcMode, bool isAccumulated, bool isAdditive)
+    {
+        return std::make_unique<SVGAnimatedPathSegListAnimator>(attributeName, animated, animationMode, calcMode, isAccumulated, isAdditive);
+    }
+
+private:
+    void progress(SVGElement* targetElement, float percentage, unsigned repeatCount) final
+    {
+        m_animated->animVal()->pathByteStreamWillChange();
+        m_function.progress(targetElement, percentage, repeatCount, m_animated->animVal()->pathByteStream());
+    }
+};
+
</ins><span class="cx"> class SVGAnimatedPointListAnimator final : public SVGAnimatedPropertyAnimator<SVGAnimatedPointList, SVGAnimationPointListFunction> {
</span><span class="cx">     using Base = SVGAnimatedPropertyAnimator<SVGAnimatedPointList, SVGAnimationPointListFunction>;
</span><span class="cx">     using Base::Base;
</span><span class="lines">@@ -205,7 +223,7 @@
</span><span class="cx"> public:
</span><span class="cx">     static auto create(const QualifiedName& attributeName, Ref<SVGAnimatedPointList>& animated, AnimationMode animationMode, CalcMode calcMode, bool isAccumulated, bool isAdditive)
</span><span class="cx">     {
</span><del>-        return std::unique_ptr<SVGAnimatedPointListAnimator>(new SVGAnimatedPointListAnimator(attributeName, animated, animationMode, calcMode, isAccumulated, isAdditive));
</del><ins>+        return std::make_unique<SVGAnimatedPointListAnimator>(attributeName, animated, animationMode, calcMode, isAccumulated, isAdditive);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyImpl.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyImpl.h    2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyImpl.h       2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include "SVGLengthList.h"
</span><span class="cx"> #include "SVGMarkerTypes.h"
</span><span class="cx"> #include "SVGNumberList.h"
</span><ins>+#include "SVGPathSegList.h"
</ins><span class="cx"> #include "SVGPointList.h"
</span><span class="cx"> #include "SVGPreserveAspectRatio.h"
</span><span class="cx"> #include "SVGRect.h"
</span><span class="lines">@@ -68,4 +69,32 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+class SVGAnimatedPathSegList : public SVGAnimatedPropertyList<SVGPathSegList> {
+    using Base = SVGAnimatedPropertyList<SVGPathSegList>;
+    using Base::Base;
+
+public:
+    static Ref<SVGAnimatedPathSegList> create(SVGElement* contextElement)
+    {
+        return adoptRef(*new SVGAnimatedPathSegList(contextElement));
+    }
+
+    SVGPathByteStream& currentPathByteStream()
+    {
+        return isAnimating() ? animVal()->pathByteStream() : baseVal()->pathByteStream();
+    }
+
+    Path currentPath()
+    {
+        return isAnimating() ? animVal()->path() : baseVal()->path();
+    }
+
+    size_t approximateMemoryCost() const
+    {
+        if (isAnimating())
+            return baseVal()->approximateMemoryCost() + animVal()->approximateMemoryCost();
+        return baseVal()->approximateMemoryCost();
+    }
+};
+
</ins><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimationAdditiveValueFunctionImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h      2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h 2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include "SVGAnimationAdditiveValueFunction.h"
</span><ins>+#include "SVGPathByteStream.h"
</ins><span class="cx"> #include "SVGPropertyTraits.h"
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -241,6 +242,55 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+class SVGAnimationPathSegListFunction : public SVGAnimationAdditiveValueFunction<SVGPathByteStream> {
+public:
+    using Base = SVGAnimationAdditiveValueFunction<SVGPathByteStream>;
+    using Base::Base;
+
+    void setFromAndToValues(SVGElement*, const String& from, const String& to) override
+    {
+        m_from = SVGPathByteStream(from);
+        m_to = SVGPathByteStream(to);
+    }
+
+    void setToAtEndOfDurationValue(const String& toAtEndOfDuration) override
+    {
+        m_toAtEndOfDuration = SVGPathByteStream(toAtEndOfDuration);
+    }
+
+    void progress(SVGElement*, float percentage, unsigned repeatCount, SVGPathByteStream& animated)
+    {
+        SVGPathByteStream underlyingPath;
+        if (m_animationMode == AnimationMode::To)
+            underlyingPath = animated;
+
+        const SVGPathByteStream& from = m_animationMode == AnimationMode::To ? underlyingPath : m_from;
+
+        // Cache the current animated value before the buildAnimatedSVGPathByteStream() clears animatedPath.
+        SVGPathByteStream lastAnimated;
+        if (!from.size() || (m_isAdditive && m_animationMode != AnimationMode::To))
+            lastAnimated = animated;
+
+        buildAnimatedSVGPathByteStream(from, m_to, animated, percentage);
+
+        // Handle additive='sum'.
+        if (!lastAnimated.isEmpty())
+            addToSVGPathByteStream(animated, lastAnimated);
+
+        // Handle accumulate='sum'.
+        if (m_isAccumulated && repeatCount)
+            addToSVGPathByteStream(animated, toAtEndOfDuration(), repeatCount);
+    }
+
+private:
+    void addFromAndToValues(SVGElement*) override
+    {
+        if (!m_from.size() || m_from.size() != m_to.size())
+            return;
+        addToSVGPathByteStream(m_to, m_from);
+    }
+};
+
</ins><span class="cx"> class SVGAnimationRectFunction : public SVGAnimationAdditiveValueFunction<FloatRect> {
</span><span class="cx"> public:
</span><span class="cx">     using Base = SVGAnimationAdditiveValueFunction<FloatRect>;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPropertyOwnerRegistryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h (243554 => 243555)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h   2019-03-27 18:33:51 UTC (rev 243554)
+++ trunk/Source/WebCore/svg/properties/SVGPropertyOwnerRegistry.h      2019-03-27 18:56:05 UTC (rev 243555)
</span><span class="lines">@@ -97,6 +97,12 @@
</span><span class="cx">         registerProperty(attributeName, SVGAnimatedAngleOrientAccessor<OwnerType>::template singleton<property1, property2>());
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    template<const LazyNeverDestroyed<const QualifiedName>& attributeName, Ref<SVGAnimatedPathSegList> OwnerType::*property>
+    static void registerProperty()
+    {
+        registerProperty(attributeName, SVGAnimatedPathSegListAccessor<OwnerType>::template singleton<property>());
+    }
+
</ins><span class="cx">     template<const LazyNeverDestroyed<const QualifiedName>& attributeName, Ref<SVGAnimatedPointList> OwnerType::*property>
</span><span class="cx">     static void registerProperty()
</span><span class="cx">     {
</span></span></pre>
</div>
</div>

</body>
</html>