<!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>[208480] trunk/Source/WebCore</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/208480">208480</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-11-09 13:30:41 -0800 (Wed, 09 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[SVG] Start moving special casing of SVG out of the bindings - SVGAngle
https://bugs.webkit.org/show_bug.cgi?id=164496

Patch by Sam Weinig &lt;sam@webkit.org&gt; on 2016-11-09
Reviewed by Darin Adler.

There is quite a bit of special casing of SVG types in the bindings that adds
a lot of complexity and is relatively fragile, as it is based on type naming.

Instead of keeping the complexity in the bindings, I am going to move it into
the implementation, where it has also longed to be.

Starting small, with just SVGAngle. It has been split in two, with the existing
SVGAngle being renamed SVGAngleValue, and the bound instance, which used to be name
SVGPropertyTearOff&lt;SVGAngle&gt;, taking the name SVGAngle (and inheriting from
SVGPropertyTearOff&lt;SVGAngleValue&gt;).

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
Add SVGAngleValue.cpp

* bindings/scripts/CodeGenerator.pm:
Remove SVGAngle as a special case.

* svg/SVGAngle.cpp: Removed.
* svg/SVGAngle.h:
Added. Implements the SVGAngle interface explicitly, getting to
the SVGAngleValue through propertyReference().

* svg/SVGAngle.idl:
* svg/SVGAngleValue.cpp: Copied from Source/WebCore/svg/SVGAngle.cpp.
* svg/SVGAngleValue.h: Copied from Source/WebCore/svg/SVGAngle.h.
Move old SVGAngle implementation to SVGAngleValue.

* svg/SVGAnimatedAngle.cpp:
Replace SVGAngle usage with SVGAngleValue.

* svg/SVGAnimatedAngle.h:
Switch SVGAnimatedAngle to be a type alias. This remains SVGAnimatedPropertyTearOff&lt;SVGAngle&gt;
as SVGAnimatedPropertyTearOff has been changed to take the TearOff type as its parameter.

* svg/SVGAnimatedLength.h:
* svg/SVGAnimatedPreserveAspectRatio.h:
* svg/SVGAnimatedRect.h:
Switch to using type aliases and pass the TearOff to SVGAnimatedPropertyTearOff.

* svg/SVGAnimatedType.cpp:
(WebCore::SVGAnimatedType::createAngleAndEnumeration):
* svg/SVGAnimatedType.h:
(WebCore::SVGAnimatedType::angleAndEnumeration):
Use SVGAngleValue.

* svg/SVGComponentTransferFunctionElement.h:
Add missing include of SVGElement.h (need because it removed from SVGPropertyTearOff).

* svg/SVGMarkerElement.cpp:
(WebCore::SVGMarkerElement::parseAttribute):
(WebCore::SVGMarkerElement::setOrient):
Switch to take an SVGAngleValue.

(WebCore::SVGMarkerElement::setOrientToAngle):
Update to pull the value out via propertyReference().

* svg/SVGMarkerElement.h:
Switch to take an SVGAngleValue.

* svg/SVGLengthList.h:
* svg/SVGNumberList.h:
* svg/SVGPathSegList.h:
* svg/SVGPointList.h:
* svg/SVGStringList.h:
* svg/SVGTransformList.h:
Switch to using type aliases in SVGPropertyTraits and add an alias for
ListItemTearOff.

* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::createSVGAngle):
* svg/SVGSVGElement.h:
Change createSVGAngle to return a Ref&lt;SVGAngle&gt; and create one.

* svg/SVGSVGElement.idl:
Annotate IDL to indicate that a new value is being returned.

* svg/SVGTransform.cpp:
Remove unnecessary include of SVGAngle.h.

* svg/SVGViewSpec.cpp:
Add missing include of SVGElement.h (need because it removed from SVGPropertyTearOff).

* svg/properties/SVGAnimatedPropertyTearOff.h:
Change to be parameterized on the TearOffType, rather than the PropertyType itself. Get the
Property type from the TearOffType.

* svg/properties/SVGListProperty.h:
* svg/properties/SVGListPropertyTearOff.h:
Fix assumption that all TearOffTypes are just a SVGPropertyTearOff templatized on a property
type. This is no longer true for SVGAngle. Instead, get the TearOffType for lists via SVGPropertyTraits.

* svg/properties/SVGPropertyTearOff.h:
Make the PropertyType available by exposing it as a type alias.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAllInOnecpp">trunk/Source/WebCore/svg/SVGAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAngleh">trunk/Source/WebCore/svg/SVGAngle.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAngleidl">trunk/Source/WebCore/svg/SVGAngle.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedAnglecpp">trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedAngleh">trunk/Source/WebCore/svg/SVGAnimatedAngle.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthh">trunk/Source/WebCore/svg/SVGAnimatedLength.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPreserveAspectRatioh">trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedRecth">trunk/Source/WebCore/svg/SVGAnimatedRect.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTypecpp">trunk/Source/WebCore/svg/SVGAnimatedType.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTypeh">trunk/Source/WebCore/svg/SVGAnimatedType.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGComponentTransferFunctionElementh">trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthListh">trunk/Source/WebCore/svg/SVGLengthList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMarkerElementcpp">trunk/Source/WebCore/svg/SVGMarkerElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMarkerElementh">trunk/Source/WebCore/svg/SVGMarkerElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGNumberListh">trunk/Source/WebCore/svg/SVGNumberList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathSegListh">trunk/Source/WebCore/svg/SVGPathSegList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPointListh">trunk/Source/WebCore/svg/SVGPointList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementcpp">trunk/Source/WebCore/svg/SVGSVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementh">trunk/Source/WebCore/svg/SVGSVGElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementidl">trunk/Source/WebCore/svg/SVGSVGElement.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGStringListh">trunk/Source/WebCore/svg/SVGStringList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformcpp">trunk/Source/WebCore/svg/SVGTransform.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformListh">trunk/Source/WebCore/svg/SVGTransformList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGViewSpeccpp">trunk/Source/WebCore/svg/SVGViewSpec.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGListPropertyh">trunk/Source/WebCore/svg/properties/SVGListProperty.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGAngleValuecpp">trunk/Source/WebCore/svg/SVGAngleValue.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAngleValueh">trunk/Source/WebCore/svg/SVGAngleValue.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGAnglecpp">trunk/Source/WebCore/svg/SVGAngle.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -2680,7 +2680,7 @@
</span><span class="cx">     svg/SVGAltGlyphDefElement.cpp
</span><span class="cx">     svg/SVGAltGlyphElement.cpp
</span><span class="cx">     svg/SVGAltGlyphItemElement.cpp
</span><del>-    svg/SVGAngle.cpp
</del><ins>+    svg/SVGAngleValue.cpp
</ins><span class="cx">     svg/SVGAnimateColorElement.cpp
</span><span class="cx">     svg/SVGAnimateElement.cpp
</span><span class="cx">     svg/SVGAnimateElementBase.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/ChangeLog        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -1,3 +1,105 @@
</span><ins>+2016-11-09  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        [SVG] Start moving special casing of SVG out of the bindings - SVGAngle
+        https://bugs.webkit.org/show_bug.cgi?id=164496
+
+        Reviewed by Darin Adler.
+
+        There is quite a bit of special casing of SVG types in the bindings that adds
+        a lot of complexity and is relatively fragile, as it is based on type naming.
+
+        Instead of keeping the complexity in the bindings, I am going to move it into
+        the implementation, where it has also longed to be. 
+
+        Starting small, with just SVGAngle. It has been split in two, with the existing
+        SVGAngle being renamed SVGAngleValue, and the bound instance, which used to be name
+        SVGPropertyTearOff&lt;SVGAngle&gt;, taking the name SVGAngle (and inheriting from 
+        SVGPropertyTearOff&lt;SVGAngleValue&gt;).
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        Add SVGAngleValue.cpp
+
+        * bindings/scripts/CodeGenerator.pm:
+        Remove SVGAngle as a special case.
+
+        * svg/SVGAngle.cpp: Removed.
+        * svg/SVGAngle.h:
+        Added. Implements the SVGAngle interface explicitly, getting to
+        the SVGAngleValue through propertyReference().
+
+        * svg/SVGAngle.idl:
+        * svg/SVGAngleValue.cpp: Copied from Source/WebCore/svg/SVGAngle.cpp.
+        * svg/SVGAngleValue.h: Copied from Source/WebCore/svg/SVGAngle.h.
+        Move old SVGAngle implementation to SVGAngleValue.
+
+        * svg/SVGAnimatedAngle.cpp:
+        Replace SVGAngle usage with SVGAngleValue.
+
+        * svg/SVGAnimatedAngle.h:
+        Switch SVGAnimatedAngle to be a type alias. This remains SVGAnimatedPropertyTearOff&lt;SVGAngle&gt;
+        as SVGAnimatedPropertyTearOff has been changed to take the TearOff type as its parameter.
+
+        * svg/SVGAnimatedLength.h:
+        * svg/SVGAnimatedPreserveAspectRatio.h:
+        * svg/SVGAnimatedRect.h:
+        Switch to using type aliases and pass the TearOff to SVGAnimatedPropertyTearOff.
+
+        * svg/SVGAnimatedType.cpp:
+        (WebCore::SVGAnimatedType::createAngleAndEnumeration):
+        * svg/SVGAnimatedType.h:
+        (WebCore::SVGAnimatedType::angleAndEnumeration):
+        Use SVGAngleValue.
+
+        * svg/SVGComponentTransferFunctionElement.h:
+        Add missing include of SVGElement.h (need because it removed from SVGPropertyTearOff).
+
+        * svg/SVGMarkerElement.cpp:
+        (WebCore::SVGMarkerElement::parseAttribute):
+        (WebCore::SVGMarkerElement::setOrient):
+        Switch to take an SVGAngleValue.
+
+        (WebCore::SVGMarkerElement::setOrientToAngle):
+        Update to pull the value out via propertyReference().
+
+        * svg/SVGMarkerElement.h:
+        Switch to take an SVGAngleValue.
+
+        * svg/SVGLengthList.h:
+        * svg/SVGNumberList.h:
+        * svg/SVGPathSegList.h:
+        * svg/SVGPointList.h:
+        * svg/SVGStringList.h:
+        * svg/SVGTransformList.h:
+        Switch to using type aliases in SVGPropertyTraits and add an alias for
+        ListItemTearOff.
+
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::createSVGAngle):
+        * svg/SVGSVGElement.h:
+        Change createSVGAngle to return a Ref&lt;SVGAngle&gt; and create one.
+
+        * svg/SVGSVGElement.idl:
+        Annotate IDL to indicate that a new value is being returned.
+
+        * svg/SVGTransform.cpp:
+        Remove unnecessary include of SVGAngle.h.
+
+        * svg/SVGViewSpec.cpp:
+        Add missing include of SVGElement.h (need because it removed from SVGPropertyTearOff).
+
+        * svg/properties/SVGAnimatedPropertyTearOff.h:
+        Change to be parameterized on the TearOffType, rather than the PropertyType itself. Get the
+        Property type from the TearOffType.
+
+        * svg/properties/SVGListProperty.h:
+        * svg/properties/SVGListPropertyTearOff.h:
+        Fix assumption that all TearOffTypes are just a SVGPropertyTearOff templatized on a property
+        type. This is no longer true for SVGAngle. Instead, get the TearOffType for lists via SVGPropertyTraits.
+
+        * svg/properties/SVGPropertyTearOff.h:
+        Make the PropertyType available by exposing it as a type alias.
+
</ins><span class="cx"> 2016-11-09  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Move Range from ExceptionCode to ExceptionOr
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -2837,6 +2837,7 @@
</span><span class="cx">                 7C7941E41C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C7941E21C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm */; };
</span><span class="cx">                 7C7941E51C56C29300A4C58E /* DataDetectorsCoreSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7941E31C56C29300A4C58E /* DataDetectorsCoreSoftLink.h */; };
</span><span class="cx">                 7C83DE861D04CC5D00FEBCF3 /* SpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */; };
</span><ins>+                7C8F22441DD3C2F600E92DA3 /* SVGAngleValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C8F22421DD3B3B900E92DA3 /* SVGAngleValue.cpp */; };
</ins><span class="cx">                 7C93F3491AA6BA5E00A98BAB /* CompiledContentExtension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C93F3471AA6BA5E00A98BAB /* CompiledContentExtension.cpp */; };
</span><span class="cx">                 7C93F34A1AA6BA5E00A98BAB /* CompiledContentExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C93F3481AA6BA5E00A98BAB /* CompiledContentExtension.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 7C93F34D1AA6BF0700A98BAB /* ContentExtensionCompiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C93F34B1AA6BF0700A98BAB /* ContentExtensionCompiler.cpp */; };
</span><span class="lines">@@ -4470,7 +4471,6 @@
</span><span class="cx">                 B22279720D00BF220071B782 /* RadialGradientAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277DC0D00BF1F0071B782 /* RadialGradientAttributes.h */; };
</span><span class="cx">                 B22279730D00BF220071B782 /* SVGAElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277DD0D00BF1F0071B782 /* SVGAElement.cpp */; };
</span><span class="cx">                 B22279740D00BF220071B782 /* SVGAElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277DE0D00BF1F0071B782 /* SVGAElement.h */; };
</span><del>-                B22279760D00BF220071B782 /* SVGAngle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277E00D00BF1F0071B782 /* SVGAngle.cpp */; };
</del><span class="cx">                 B22279770D00BF220071B782 /* SVGAngle.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277E10D00BF1F0071B782 /* SVGAngle.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 B22279790D00BF220071B782 /* SVGAnimateColorElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277E30D00BF1F0071B782 /* SVGAnimateColorElement.cpp */; };
</span><span class="cx">                 B222797A0D00BF220071B782 /* SVGAnimateColorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277E40D00BF1F0071B782 /* SVGAnimateColorElement.h */; };
</span><span class="lines">@@ -10207,6 +10207,8 @@
</span><span class="cx">                 7C7941E21C56C29300A4C58E /* DataDetectorsCoreSoftLink.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataDetectorsCoreSoftLink.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C7941E31C56C29300A4C58E /* DataDetectorsCoreSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataDetectorsCoreSoftLink.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpringSolver.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                7C8F22421DD3B3B900E92DA3 /* SVGAngleValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAngleValue.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7C8F22431DD3B3B900E92DA3 /* SVGAngleValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAngleValue.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 7C93F3471AA6BA5E00A98BAB /* CompiledContentExtension.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompiledContentExtension.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C93F3481AA6BA5E00A98BAB /* CompiledContentExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompiledContentExtension.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C93F34B1AA6BF0700A98BAB /* ContentExtensionCompiler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentExtensionCompiler.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -12062,7 +12064,6 @@
</span><span class="cx">                 B22277DD0D00BF1F0071B782 /* SVGAElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAElement.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22277DE0D00BF1F0071B782 /* SVGAElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGAElement.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22277DF0D00BF1F0071B782 /* SVGAElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAElement.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                B22277E00D00BF1F0071B782 /* SVGAngle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAngle.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 B22277E10D00BF1F0071B782 /* SVGAngle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGAngle.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22277E20D00BF1F0071B782 /* SVGAngle.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAngle.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22277E30D00BF1F0071B782 /* SVGAnimateColorElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimateColorElement.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -20687,9 +20688,10 @@
</span><span class="cx">                                 24D912B413CA9A6900D21915 /* SVGAltGlyphItemElement.cpp */,
</span><span class="cx">                                 24D912B513CA9A6900D21915 /* SVGAltGlyphItemElement.h */,
</span><span class="cx">                                 24D912B613CA9A6900D21915 /* SVGAltGlyphItemElement.idl */,
</span><del>-                                B22277E00D00BF1F0071B782 /* SVGAngle.cpp */,
</del><span class="cx">                                 B22277E10D00BF1F0071B782 /* SVGAngle.h */,
</span><span class="cx">                                 B22277E20D00BF1F0071B782 /* SVGAngle.idl */,
</span><ins>+                                7C8F22421DD3B3B900E92DA3 /* SVGAngleValue.cpp */,
+                                7C8F22431DD3B3B900E92DA3 /* SVGAngleValue.h */,
</ins><span class="cx">                                 B22277E30D00BF1F0071B782 /* SVGAnimateColorElement.cpp */,
</span><span class="cx">                                 B22277E40D00BF1F0071B782 /* SVGAnimateColorElement.h */,
</span><span class="cx">                                 B22277E50D00BF1F0071B782 /* SVGAnimateColorElement.idl */,
</span><span class="lines">@@ -30929,7 +30931,6 @@
</span><span class="cx">                                 24D912B013CA9A1F00D21915 /* SVGAltGlyphDefElement.cpp in Sources */,
</span><span class="cx">                                 65653F2D0D9727D200CA9723 /* SVGAltGlyphElement.cpp in Sources */,
</span><span class="cx">                                 24D912B713CA9A6900D21915 /* SVGAltGlyphItemElement.cpp in Sources */,
</span><del>-                                B22279760D00BF220071B782 /* SVGAngle.cpp in Sources */,
</del><span class="cx">                                 B22279790D00BF220071B782 /* SVGAnimateColorElement.cpp in Sources */,
</span><span class="cx">                                 4362C7B913AC6F1A00344BEB /* SVGAnimatedAngle.cpp in Sources */,
</span><span class="cx">                                 431A308813B8F978007791E4 /* SVGAnimatedBoolean.cpp in Sources */,
</span><span class="lines">@@ -31134,6 +31135,7 @@
</span><span class="cx">                                 CECADFCD1537791D00E37068 /* TextInsertionBaseCommand.cpp in Sources */,
</span><span class="cx">                                 93309E1B099E64920056E581 /* TextIterator.cpp in Sources */,
</span><span class="cx">                                 E4D988B617BFEB210084FB88 /* TextNodeTraversal.cpp in Sources */,
</span><ins>+                                7C8F22441DD3C2F600E92DA3 /* SVGAngleValue.cpp in Sources */,
</ins><span class="cx">                                 1C18DA58181AF6A500C4EF22 /* TextPainter.cpp in Sources */,
</span><span class="cx">                                 E4C91A101802343900A17F6D /* TextPaintStyle.cpp in Sources */,
</span><span class="cx">                                 93F19A9D08245E59001E9ABC /* TextResourceDecoder.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -119,7 +119,6 @@
</span><span class="cx"> );
</span><span class="cx"> 
</span><span class="cx"> my %svgTypeNeedingTearOff = (
</span><del>-    &quot;SVGAngle&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGAngle&gt;&quot;,
</del><span class="cx">     &quot;SVGLength&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGLength&gt;&quot;,
</span><span class="cx">     &quot;SVGLengthList&quot; =&gt; &quot;SVGListPropertyTearOff&lt;SVGLengthList&gt;&quot;,
</span><span class="cx">     &quot;SVGMatrix&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGMatrix&gt;&quot;,
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAllInOne.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAllInOne.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAllInOne.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #include &quot;SVGAltGlyphDefElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAltGlyphElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAltGlyphItemElement.cpp&quot;
</span><del>-#include &quot;SVGAngle.cpp&quot;
</del><span class="cx"> #include &quot;SVGAnimateColorElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAnimateElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGAnimateElementBase.cpp&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnglecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGAngle.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAngle.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAngle.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -1,204 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
- * 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.
- */
-
-#include &quot;config.h&quot;
-#include &quot;SVGAngle.h&quot;
-
-#include &quot;ExceptionCode.h&quot;
-#include &quot;SVGParserUtilities.h&quot;
-#include &lt;wtf/MathExtras.h&gt;
-#include &lt;wtf/text/StringView.h&gt;
-
-namespace WebCore {
-
-float SVGAngle::value() const
-{
-    switch (m_unitType) {
-    case SVG_ANGLETYPE_GRAD:
-        return grad2deg(m_valueInSpecifiedUnits);
-    case SVG_ANGLETYPE_RAD:
-        return rad2deg(m_valueInSpecifiedUnits);
-    case SVG_ANGLETYPE_UNSPECIFIED:
-    case SVG_ANGLETYPE_UNKNOWN:
-    case SVG_ANGLETYPE_DEG:
-        return m_valueInSpecifiedUnits;
-    }
-    ASSERT_NOT_REACHED();
-    return 0;
-}
-
-void SVGAngle::setValue(float value)
-{
-    switch (m_unitType) {
-    case SVG_ANGLETYPE_GRAD:
-        m_valueInSpecifiedUnits = deg2grad(value);
-        return;
-    case SVG_ANGLETYPE_RAD:
-        m_valueInSpecifiedUnits = deg2rad(value);
-        return;
-    case SVG_ANGLETYPE_UNSPECIFIED:
-    case SVG_ANGLETYPE_UNKNOWN:
-    case SVG_ANGLETYPE_DEG:
-        m_valueInSpecifiedUnits = value;
-        return;
-    }
-    ASSERT_NOT_REACHED();
-}
-
-String SVGAngle::valueAsString() const
-{
-    switch (m_unitType) {
-    case SVG_ANGLETYPE_DEG:
-        return String::number(m_valueInSpecifiedUnits) + &quot;deg&quot;;
-    case SVG_ANGLETYPE_RAD:
-        return String::number(m_valueInSpecifiedUnits) + &quot;rad&quot;;
-    case SVG_ANGLETYPE_GRAD:
-        return String::number(m_valueInSpecifiedUnits) + &quot;grad&quot;;
-    case SVG_ANGLETYPE_UNSPECIFIED:
-    case SVG_ANGLETYPE_UNKNOWN:
-        return String::number(m_valueInSpecifiedUnits);
-    }
-
-    ASSERT_NOT_REACHED();
-    return String();
-}
-
-static inline SVGAngle::SVGAngleType parseAngleType(const UChar* ptr, const UChar* end)
-{
-    switch (end - ptr) {
-    case 0:
-        return SVGAngle::SVG_ANGLETYPE_UNSPECIFIED;
-    case 3:
-        if (ptr[0] == 'd' &amp;&amp; ptr[1] == 'e' &amp;&amp; ptr[2] == 'g')
-            return SVGAngle::SVG_ANGLETYPE_DEG;
-        if (ptr[0] == 'r' &amp;&amp; ptr[1] == 'a' &amp;&amp; ptr[2] == 'd')
-            return SVGAngle::SVG_ANGLETYPE_RAD;
-        break;
-    case 4:
-        if (ptr[0] == 'g' &amp;&amp; ptr[1] == 'r' &amp;&amp; ptr[2] == 'a' &amp;&amp; ptr[3] == 'd')
-            return SVGAngle::SVG_ANGLETYPE_GRAD;
-        break;
-    }
-    return SVGAngle::SVG_ANGLETYPE_UNKNOWN;
-}
-
-ExceptionOr&lt;void&gt; SVGAngle::setValueAsString(const String&amp; value)
-{
-    if (value.isEmpty()) {
-        m_unitType = SVG_ANGLETYPE_UNSPECIFIED;
-        return { };
-    }
-
-    auto upconvertedCharacters = StringView(value).upconvertedCharacters();
-    const UChar* ptr = upconvertedCharacters;
-    const UChar* end = ptr + value.length();
-
-    float valueInSpecifiedUnits = 0;
-    if (!parseNumber(ptr, end, valueInSpecifiedUnits, false))
-        return Exception { SYNTAX_ERR };
-
-    auto unitType = parseAngleType(ptr, end);
-    if (unitType == SVG_ANGLETYPE_UNKNOWN)
-        return Exception { SYNTAX_ERR };
-
-    m_unitType = unitType;
-    m_valueInSpecifiedUnits = valueInSpecifiedUnits;
-    return { };
-}
-
-ExceptionOr&lt;void&gt; SVGAngle::newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits)
-{
-    if (unitType == SVG_ANGLETYPE_UNKNOWN || unitType &gt; SVG_ANGLETYPE_GRAD)
-        return Exception { NOT_SUPPORTED_ERR };
-
-    m_unitType = static_cast&lt;SVGAngleType&gt;(unitType);
-    m_valueInSpecifiedUnits = valueInSpecifiedUnits;
-    return { };
-}
-
-ExceptionOr&lt;void&gt; SVGAngle::convertToSpecifiedUnits(unsigned short unitType)
-{
-    if (unitType == SVG_ANGLETYPE_UNKNOWN || m_unitType == SVG_ANGLETYPE_UNKNOWN || unitType &gt; SVG_ANGLETYPE_GRAD)
-        return Exception { NOT_SUPPORTED_ERR };
-
-    if (unitType == m_unitType)
-        return { };
-
-    switch (m_unitType) {
-    case SVG_ANGLETYPE_RAD:
-        switch (unitType) {
-        case SVG_ANGLETYPE_GRAD:
-            m_valueInSpecifiedUnits = rad2grad(m_valueInSpecifiedUnits);
-            break;
-        case SVG_ANGLETYPE_UNSPECIFIED:
-        case SVG_ANGLETYPE_DEG:
-            m_valueInSpecifiedUnits = rad2deg(m_valueInSpecifiedUnits);
-            break;
-        case SVG_ANGLETYPE_RAD:
-        case SVG_ANGLETYPE_UNKNOWN:
-            ASSERT_NOT_REACHED();
-            break;
-        }
-        break;
-    case SVG_ANGLETYPE_GRAD:
-        switch (unitType) {
-        case SVG_ANGLETYPE_RAD:
-            m_valueInSpecifiedUnits = grad2rad(m_valueInSpecifiedUnits);
-            break;
-        case SVG_ANGLETYPE_UNSPECIFIED:
-        case SVG_ANGLETYPE_DEG:
-            m_valueInSpecifiedUnits = grad2deg(m_valueInSpecifiedUnits);
-            break;
-        case SVG_ANGLETYPE_GRAD:
-        case SVG_ANGLETYPE_UNKNOWN:
-            ASSERT_NOT_REACHED();
-            break;
-        }
-        break;
-    case SVG_ANGLETYPE_UNSPECIFIED:
-        // Spec: For angles, a unitless value is treated the same as if degrees were specified.
-    case SVG_ANGLETYPE_DEG:
-        switch (unitType) {
-        case SVG_ANGLETYPE_RAD:
-            m_valueInSpecifiedUnits = deg2rad(m_valueInSpecifiedUnits);
-            break;
-        case SVG_ANGLETYPE_GRAD:
-            m_valueInSpecifiedUnits = deg2grad(m_valueInSpecifiedUnits);
-            break;
-        case SVG_ANGLETYPE_UNSPECIFIED:
-        case SVG_ANGLETYPE_DEG:
-            break;
-        case SVG_ANGLETYPE_UNKNOWN:
-            ASSERT_NOT_REACHED();
-            break;
-        }
-        break;
-    case SVG_ANGLETYPE_UNKNOWN:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-
-    m_unitType = static_cast&lt;SVGAngleType&gt;(unitType);
-
-    return { };
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAngleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAngle.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAngle.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAngle.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -1,34 +1,39 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</del><ins>+ * Copyright (C) 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * 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.
</del><ins>+ * 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.
</ins><span class="cx">  *
</span><del>- * 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.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``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 ITS 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.
</ins><span class="cx">  */
</span><del>-
</del><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;ExceptionOr.h&quot;
-#include &quot;SVGPropertyTraits.h&quot;
</del><ins>+#include &quot;ExceptionCode.h&quot;
+#include &quot;SVGAngleValue.h&quot;
+#include &quot;SVGPropertyTearOff.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGAngle {
-    WTF_MAKE_FAST_ALLOCATED;
</del><ins>+class SVGAngle : public SVGPropertyTearOff&lt;SVGAngleValue&gt; {
</ins><span class="cx"> public:
</span><ins>+    // FIXME: This is duplicated in SVGAngleValue. We should find someway to have
+    // only one copy, but for now, this one is needed to satisfy the bindings.
</ins><span class="cx">     enum SVGAngleType {
</span><span class="cx">         SVG_ANGLETYPE_UNKNOWN = 0,
</span><span class="cx">         SVG_ANGLETYPE_UNSPECIFIED = 1,
</span><span class="lines">@@ -37,28 +42,125 @@
</span><span class="cx">         SVG_ANGLETYPE_GRAD = 4
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    SVGAngleType unitType() const { return m_unitType; }
</del><ins>+    static Ref&lt;SVGAngle&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGAngleValue&amp; value)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGAngle(animatedProperty, role, value));
+    }
</ins><span class="cx"> 
</span><del>-    void setValue(float);
-    float value() const;
</del><ins>+    static Ref&lt;SVGAngle&gt; create(const SVGAngleValue&amp; initialValue = { })
+    {
+        return adoptRef(*new SVGAngle(initialValue));
+    }
</ins><span class="cx"> 
</span><del>-    void setValueInSpecifiedUnits(float valueInSpecifiedUnits) { m_valueInSpecifiedUnits = valueInSpecifiedUnits; }
-    float valueInSpecifiedUnits() const { return m_valueInSpecifiedUnits; }
</del><ins>+    static Ref&lt;SVGAngle&gt; create(const SVGAngleValue* initialValue)
+    {
+        return adoptRef(*new SVGAngle(initialValue));
+    }
</ins><span class="cx"> 
</span><del>-    ExceptionOr&lt;void&gt; setValueAsString(const String&amp;);
-    String valueAsString() const;
</del><ins>+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGAngle&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
+    {
+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
+    }
</ins><span class="cx"> 
</span><del>-    ExceptionOr&lt;void&gt; newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
-    ExceptionOr&lt;void&gt; convertToSpecifiedUnits(unsigned short unitType);
</del><ins>+    SVGAngleValue::Type unitType()
+    {
+        return propertyReference().unitType();
+    }
</ins><span class="cx"> 
</span><ins>+    ExceptionOr&lt;void&gt; setValueForBindings(float value)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setValue(value);
+        commitChange();
+
+        return { };
+    }
+    
+    float valueForBindings()
+    {
+        return propertyReference().value();
+    }
+
+    ExceptionOr&lt;void&gt; setValueInSpecifiedUnits(float valueInSpecifiedUnits)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setValueInSpecifiedUnits(valueInSpecifiedUnits);
+        commitChange();
+        
+        return { };
+    }
+    
+    float valueInSpecifiedUnits()
+    {
+        return propertyReference().valueInSpecifiedUnits();
+    }
+
+    ExceptionOr&lt;void&gt; setValueAsString(const String&amp; value)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().setValueAsString(value);
+        if (result.hasException())
+            return result;
+        
+        commitChange();
+        return result;
+    }
+
+    String valueAsString()
+    {
+        return propertyReference().valueAsString();
+    }
+
+    ExceptionOr&lt;void&gt; newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+        if (result.hasException())
+            return result;
+        
+        commitChange();
+        return result;
+    }
+    
+    ExceptionOr&lt;void&gt; convertToSpecifiedUnits(unsigned short unitType)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().convertToSpecifiedUnits(unitType);
+        if (result.hasException())
+            return result;
+        
+        commitChange();
+        return result;
+    }
+
</ins><span class="cx"> private:
</span><del>-    SVGAngleType m_unitType { SVG_ANGLETYPE_UNSPECIFIED };
-    float m_valueInSpecifiedUnits { 0 };
-};
</del><ins>+    SVGAngle(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGAngleValue&amp; value)
+        : SVGPropertyTearOff&lt;SVGAngleValue&gt;(animatedProperty, role, value)
+    {
+    }
</ins><span class="cx"> 
</span><del>-template&lt;&gt; struct SVGPropertyTraits&lt;SVGAngle&gt; {
-    static SVGAngle initialValue() { return SVGAngle(); }
-    static String toString(const SVGAngle&amp; type) { return type.valueAsString(); }
</del><ins>+    explicit SVGAngle(const SVGAngleValue&amp; initialValue)
+        : SVGPropertyTearOff&lt;SVGAngleValue&gt;(initialValue)
+    {
+    }
+
+    explicit SVGAngle(const SVGAngleValue* initialValue)
+        : SVGPropertyTearOff&lt;SVGAngleValue&gt;(initialValue)
+    {
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAngleidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAngle.idl (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAngle.idl        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAngle.idl        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -29,8 +29,8 @@
</span><span class="cx">     const unsigned short SVG_ANGLETYPE_GRAD = 4;
</span><span class="cx"> 
</span><span class="cx">     readonly attribute unsigned short unitType;
</span><del>-    attribute unrestricted float value;
-    attribute unrestricted float valueInSpecifiedUnits;
</del><ins>+    [SetterMayThrowException, ImplementedAs=valueForBindings] attribute unrestricted float value;
+    [SetterMayThrowException] attribute unrestricted float valueInSpecifiedUnits;
</ins><span class="cx"> 
</span><span class="cx">     [SetterMayThrowException] attribute DOMString valueAsString;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAngleValuecppfromrev208479trunkSourceWebCoresvgSVGAnglecpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/svg/SVGAngleValue.cpp (from rev 208479, trunk/Source/WebCore/svg/SVGAngle.cpp) (0 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAngleValue.cpp                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGAngleValue.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -0,0 +1,204 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
+ * 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.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;SVGAngleValue.h&quot;
+
+#include &quot;ExceptionCode.h&quot;
+#include &quot;SVGParserUtilities.h&quot;
+#include &lt;wtf/MathExtras.h&gt;
+#include &lt;wtf/text/StringView.h&gt;
+
+namespace WebCore {
+
+float SVGAngleValue::value() const
+{
+    switch (m_unitType) {
+    case SVG_ANGLETYPE_GRAD:
+        return grad2deg(m_valueInSpecifiedUnits);
+    case SVG_ANGLETYPE_RAD:
+        return rad2deg(m_valueInSpecifiedUnits);
+    case SVG_ANGLETYPE_UNSPECIFIED:
+    case SVG_ANGLETYPE_UNKNOWN:
+    case SVG_ANGLETYPE_DEG:
+        return m_valueInSpecifiedUnits;
+    }
+    ASSERT_NOT_REACHED();
+    return 0;
+}
+
+void SVGAngleValue::setValue(float value)
+{
+    switch (m_unitType) {
+    case SVG_ANGLETYPE_GRAD:
+        m_valueInSpecifiedUnits = deg2grad(value);
+        return;
+    case SVG_ANGLETYPE_RAD:
+        m_valueInSpecifiedUnits = deg2rad(value);
+        return;
+    case SVG_ANGLETYPE_UNSPECIFIED:
+    case SVG_ANGLETYPE_UNKNOWN:
+    case SVG_ANGLETYPE_DEG:
+        m_valueInSpecifiedUnits = value;
+        return;
+    }
+    ASSERT_NOT_REACHED();
+}
+
+String SVGAngleValue::valueAsString() const
+{
+    switch (m_unitType) {
+    case SVG_ANGLETYPE_DEG:
+        return String::number(m_valueInSpecifiedUnits) + &quot;deg&quot;;
+    case SVG_ANGLETYPE_RAD:
+        return String::number(m_valueInSpecifiedUnits) + &quot;rad&quot;;
+    case SVG_ANGLETYPE_GRAD:
+        return String::number(m_valueInSpecifiedUnits) + &quot;grad&quot;;
+    case SVG_ANGLETYPE_UNSPECIFIED:
+    case SVG_ANGLETYPE_UNKNOWN:
+        return String::number(m_valueInSpecifiedUnits);
+    }
+
+    ASSERT_NOT_REACHED();
+    return String();
+}
+
+static inline SVGAngleValue::Type parseAngleType(const UChar* ptr, const UChar* end)
+{
+    switch (end - ptr) {
+    case 0:
+        return SVGAngleValue::SVG_ANGLETYPE_UNSPECIFIED;
+    case 3:
+        if (ptr[0] == 'd' &amp;&amp; ptr[1] == 'e' &amp;&amp; ptr[2] == 'g')
+            return SVGAngleValue::SVG_ANGLETYPE_DEG;
+        if (ptr[0] == 'r' &amp;&amp; ptr[1] == 'a' &amp;&amp; ptr[2] == 'd')
+            return SVGAngleValue::SVG_ANGLETYPE_RAD;
+        break;
+    case 4:
+        if (ptr[0] == 'g' &amp;&amp; ptr[1] == 'r' &amp;&amp; ptr[2] == 'a' &amp;&amp; ptr[3] == 'd')
+            return SVGAngleValue::SVG_ANGLETYPE_GRAD;
+        break;
+    }
+    return SVGAngleValue::SVG_ANGLETYPE_UNKNOWN;
+}
+
+ExceptionOr&lt;void&gt; SVGAngleValue::setValueAsString(const String&amp; value)
+{
+    if (value.isEmpty()) {
+        m_unitType = SVG_ANGLETYPE_UNSPECIFIED;
+        return { };
+    }
+
+    auto upconvertedCharacters = StringView(value).upconvertedCharacters();
+    const UChar* ptr = upconvertedCharacters;
+    const UChar* end = ptr + value.length();
+
+    float valueInSpecifiedUnits = 0;
+    if (!parseNumber(ptr, end, valueInSpecifiedUnits, false))
+        return Exception { SYNTAX_ERR };
+
+    auto unitType = parseAngleType(ptr, end);
+    if (unitType == SVG_ANGLETYPE_UNKNOWN)
+        return Exception { SYNTAX_ERR };
+
+    m_unitType = unitType;
+    m_valueInSpecifiedUnits = valueInSpecifiedUnits;
+    return { };
+}
+
+ExceptionOr&lt;void&gt; SVGAngleValue::newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits)
+{
+    if (unitType == SVG_ANGLETYPE_UNKNOWN || unitType &gt; SVG_ANGLETYPE_GRAD)
+        return Exception { NOT_SUPPORTED_ERR };
+
+    m_unitType = static_cast&lt;Type&gt;(unitType);
+    m_valueInSpecifiedUnits = valueInSpecifiedUnits;
+    return { };
+}
+
+ExceptionOr&lt;void&gt; SVGAngleValue::convertToSpecifiedUnits(unsigned short unitType)
+{
+    if (unitType == SVG_ANGLETYPE_UNKNOWN || m_unitType == SVG_ANGLETYPE_UNKNOWN || unitType &gt; SVG_ANGLETYPE_GRAD)
+        return Exception { NOT_SUPPORTED_ERR };
+
+    if (unitType == m_unitType)
+        return { };
+
+    switch (m_unitType) {
+    case SVG_ANGLETYPE_RAD:
+        switch (unitType) {
+        case SVG_ANGLETYPE_GRAD:
+            m_valueInSpecifiedUnits = rad2grad(m_valueInSpecifiedUnits);
+            break;
+        case SVG_ANGLETYPE_UNSPECIFIED:
+        case SVG_ANGLETYPE_DEG:
+            m_valueInSpecifiedUnits = rad2deg(m_valueInSpecifiedUnits);
+            break;
+        case SVG_ANGLETYPE_RAD:
+        case SVG_ANGLETYPE_UNKNOWN:
+            ASSERT_NOT_REACHED();
+            break;
+        }
+        break;
+    case SVG_ANGLETYPE_GRAD:
+        switch (unitType) {
+        case SVG_ANGLETYPE_RAD:
+            m_valueInSpecifiedUnits = grad2rad(m_valueInSpecifiedUnits);
+            break;
+        case SVG_ANGLETYPE_UNSPECIFIED:
+        case SVG_ANGLETYPE_DEG:
+            m_valueInSpecifiedUnits = grad2deg(m_valueInSpecifiedUnits);
+            break;
+        case SVG_ANGLETYPE_GRAD:
+        case SVG_ANGLETYPE_UNKNOWN:
+            ASSERT_NOT_REACHED();
+            break;
+        }
+        break;
+    case SVG_ANGLETYPE_UNSPECIFIED:
+        // Spec: For angles, a unitless value is treated the same as if degrees were specified.
+    case SVG_ANGLETYPE_DEG:
+        switch (unitType) {
+        case SVG_ANGLETYPE_RAD:
+            m_valueInSpecifiedUnits = deg2rad(m_valueInSpecifiedUnits);
+            break;
+        case SVG_ANGLETYPE_GRAD:
+            m_valueInSpecifiedUnits = deg2grad(m_valueInSpecifiedUnits);
+            break;
+        case SVG_ANGLETYPE_UNSPECIFIED:
+        case SVG_ANGLETYPE_DEG:
+            break;
+        case SVG_ANGLETYPE_UNKNOWN:
+            ASSERT_NOT_REACHED();
+            break;
+        }
+        break;
+    case SVG_ANGLETYPE_UNKNOWN:
+        ASSERT_NOT_REACHED();
+        break;
+    }
+
+    m_unitType = static_cast&lt;Type&gt;(unitType);
+
+    return { };
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAngleValuehfromrev208479trunkSourceWebCoresvgSVGAngleh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/svg/SVGAngleValue.h (from rev 208479, trunk/Source/WebCore/svg/SVGAngle.h) (0 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAngleValue.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGAngleValue.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -0,0 +1,64 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
+ * 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 &quot;ExceptionOr.h&quot;
+#include &quot;SVGPropertyTraits.h&quot;
+
+namespace WebCore {
+
+class SVGAngleValue {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    enum Type {
+        SVG_ANGLETYPE_UNKNOWN = 0,
+        SVG_ANGLETYPE_UNSPECIFIED = 1,
+        SVG_ANGLETYPE_DEG = 2,
+        SVG_ANGLETYPE_RAD = 3,
+        SVG_ANGLETYPE_GRAD = 4
+    };
+
+    Type unitType() const { return m_unitType; }
+
+    void setValue(float);
+    float value() const;
+
+    void setValueInSpecifiedUnits(float valueInSpecifiedUnits) { m_valueInSpecifiedUnits = valueInSpecifiedUnits; }
+    float valueInSpecifiedUnits() const { return m_valueInSpecifiedUnits; }
+
+    ExceptionOr&lt;void&gt; setValueAsString(const String&amp;);
+    String valueAsString() const;
+
+    ExceptionOr&lt;void&gt; newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
+    ExceptionOr&lt;void&gt; convertToSpecifiedUnits(unsigned short unitType);
+
+private:
+    Type m_unitType { SVG_ANGLETYPE_UNSPECIFIED };
+    float m_valueInSpecifiedUnits { 0 };
+};
+
+template&lt;&gt; struct SVGPropertyTraits&lt;SVGAngleValue&gt; {
+    static SVGAngleValue initialValue() { return SVGAngleValue(); }
+    static String toString(const SVGAngleValue&amp; type) { return type.valueAsString(); }
+};
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedAnglecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -32,10 +32,10 @@
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedAngleAnimator::constructFromString(const String&amp; string)
</span><span class="cx"> {
</span><del>-    auto animatedType = SVGAnimatedType::createAngleAndEnumeration(std::make_unique&lt;std::pair&lt;SVGAngle, unsigned&gt;&gt;());
-    std::pair&lt;SVGAngle, unsigned&gt;&amp; animatedPair = animatedType-&gt;angleAndEnumeration();
</del><ins>+    auto animatedType = SVGAnimatedType::createAngleAndEnumeration(std::make_unique&lt;std::pair&lt;SVGAngleValue, unsigned&gt;&gt;());
+    auto&amp; animatedPair = animatedType-&gt;angleAndEnumeration();
</ins><span class="cx"> 
</span><del>-    SVGAngle angle;
</del><ins>+    SVGAngleValue angle;
</ins><span class="cx">     SVGMarkerOrientType orientType = SVGPropertyTraits&lt;SVGMarkerOrientType&gt;::fromString(string, angle);
</span><span class="cx">     if (orientType &gt; 0)
</span><span class="cx">         animatedPair.second = orientType;
</span><span class="lines">@@ -75,13 +75,13 @@
</span><span class="cx">     ASSERT(from-&gt;type() == AnimatedAngle);
</span><span class="cx">     ASSERT(from-&gt;type() == to-&gt;type());
</span><span class="cx"> 
</span><del>-    const std::pair&lt;SVGAngle, unsigned&gt;&amp; fromAngleAndEnumeration = from-&gt;angleAndEnumeration();
-    std::pair&lt;SVGAngle, unsigned&gt;&amp; toAngleAndEnumeration = to-&gt;angleAndEnumeration();
</del><ins>+    const auto&amp; fromAngleAndEnumeration = from-&gt;angleAndEnumeration();
+    auto&amp; toAngleAndEnumeration = to-&gt;angleAndEnumeration();
</ins><span class="cx">     // Only respect by animations, if from and by are both specified in angles (and not eg. 'auto').
</span><span class="cx">     if (fromAngleAndEnumeration.second != toAngleAndEnumeration.second || fromAngleAndEnumeration.second != SVGMarkerOrientAngle)
</span><span class="cx">         return;
</span><del>-    const SVGAngle&amp; fromAngle = fromAngleAndEnumeration.first;
-    SVGAngle&amp; toAngle = toAngleAndEnumeration.first;
</del><ins>+    const auto&amp; fromAngle = fromAngleAndEnumeration.first;
+    auto&amp; toAngle = toAngleAndEnumeration.first;
</ins><span class="cx">     toAngle.setValue(toAngle.value() + fromAngle.value());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -90,10 +90,10 @@
</span><span class="cx">     ASSERT(m_animationElement);
</span><span class="cx">     ASSERT(m_contextElement);
</span><span class="cx"> 
</span><del>-    const std::pair&lt;SVGAngle, unsigned&gt;&amp; fromAngleAndEnumeration = m_animationElement-&gt;animationMode() == ToAnimation ? animated-&gt;angleAndEnumeration() : from-&gt;angleAndEnumeration();
-    const std::pair&lt;SVGAngle, unsigned&gt;&amp; toAngleAndEnumeration = to-&gt;angleAndEnumeration();
-    const std::pair&lt;SVGAngle, unsigned&gt;&amp; toAtEndOfDurationAngleAndEnumeration = toAtEndOfDuration-&gt;angleAndEnumeration();
-    std::pair&lt;SVGAngle, unsigned&gt;&amp; animatedAngleAndEnumeration = animated-&gt;angleAndEnumeration();
</del><ins>+    const auto&amp; fromAngleAndEnumeration = m_animationElement-&gt;animationMode() == ToAnimation ? animated-&gt;angleAndEnumeration() : from-&gt;angleAndEnumeration();
+    auto&amp; toAngleAndEnumeration = to-&gt;angleAndEnumeration();
+    auto&amp; toAtEndOfDurationAngleAndEnumeration = toAtEndOfDuration-&gt;angleAndEnumeration();
+    auto&amp; animatedAngleAndEnumeration = animated-&gt;angleAndEnumeration();
</ins><span class="cx"> 
</span><span class="cx">     if (fromAngleAndEnumeration.second != toAngleAndEnumeration.second) {
</span><span class="cx">         // Discrete animation - no linear interpolation possible between values (e.g. auto to angle).
</span><span class="lines">@@ -117,8 +117,8 @@
</span><span class="cx">         // Regular from angle to angle animation, with support for smooth interpolation, and additive and accumulated animation.
</span><span class="cx">         animatedAngleAndEnumeration.second = SVGMarkerOrientAngle;
</span><span class="cx"> 
</span><del>-        SVGAngle&amp; animatedSVGAngle = animatedAngleAndEnumeration.first;
-        const SVGAngle&amp; toAtEndOfDurationSVGAngle = toAtEndOfDurationAngleAndEnumeration.first;
</del><ins>+        auto&amp; animatedSVGAngle = animatedAngleAndEnumeration.first;
+        const auto&amp; toAtEndOfDurationSVGAngle = toAtEndOfDurationAngleAndEnumeration.first;
</ins><span class="cx">         float animatedAngle = animatedSVGAngle.value();
</span><span class="cx">         m_animationElement-&gt;animateAdditiveNumber(percentage, repeatCount, fromAngleAndEnumeration.first.value(), toAngleAndEnumeration.first.value(), toAtEndOfDurationSVGAngle.value(), animatedAngle);
</span><span class="cx">         animatedSVGAngle.setValue(animatedAngle);
</span><span class="lines">@@ -136,9 +136,9 @@
</span><span class="cx"> 
</span><span class="cx"> float SVGAnimatedAngleAnimator::calculateDistance(const String&amp; fromString, const String&amp; toString)
</span><span class="cx"> {
</span><del>-    SVGAngle from = SVGAngle();
</del><ins>+    auto from = SVGAngleValue();
</ins><span class="cx">     from.setValueAsString(fromString);
</span><del>-    SVGAngle to = SVGAngle();
</del><ins>+    auto to = SVGAngleValue();
</ins><span class="cx">     to.setValueAsString(toString);
</span><span class="cx">     return fabsf(to.value() - from.value());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedAngleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedAngle.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedAngle.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedAngle.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -26,11 +26,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef SVGAnimatedPropertyTearOff&lt;SVGAngle&gt; SVGAnimatedAngle;
</del><ins>+using SVGAnimatedAngle = SVGAnimatedPropertyTearOff&lt;SVGAngle&gt;;
</ins><span class="cx"> 
</span><span class="cx"> // Helper macros to declare/define a SVGAnimatedAngle object. SVGAnimatedAngle is only used in the SVG DOM for SVGMarkerElement.
</span><span class="cx"> #define DECLARE_ANIMATED_ANGLE(UpperProperty, LowerProperty) \
</span><del>-DECLARE_ANIMATED_PROPERTY(SVGAnimatedAngle, SVGAngle, UpperProperty, LowerProperty, )
</del><ins>+DECLARE_ANIMATED_PROPERTY(SVGAnimatedAngle, SVGAngleValue, UpperProperty, LowerProperty, )
</ins><span class="cx"> 
</span><span class="cx"> // Only used for SVGMarkerElements orientAttr, which maps to SVGAnimatedAngle orientAngle and SVGAnimatedEnumeration orientType.
</span><span class="cx"> #define DEFINE_ANIMATED_ANGLE_AND_ENUMERATION(OwnerType, DOMAttribute, SVGDOMAttributeIdentifier, UpperProperty, LowerProperty) \
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLength.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLength.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedLength.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -26,8 +26,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef SVGAnimatedPropertyTearOff&lt;SVGLength&gt; SVGAnimatedLength;
</del><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
</ins><span class="cx"> 
</span><ins>+using SVGAnimatedLength = SVGAnimatedPropertyTearOff&lt;SVGPropertyTearOff&lt;SVGLength&gt;&gt;;
+
</ins><span class="cx"> // Helper macros to declare/define a SVGAnimatedLength object
</span><span class="cx"> #define DECLARE_ANIMATED_LENGTH(UpperProperty, LowerProperty) \
</span><span class="cx"> DECLARE_ANIMATED_PROPERTY(SVGAnimatedLength, SVGLength, UpperProperty, LowerProperty, )
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPreserveAspectRatioh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -26,8 +26,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef SVGAnimatedPropertyTearOff&lt;SVGPreserveAspectRatio&gt; SVGAnimatedPreserveAspectRatio;
</del><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
</ins><span class="cx"> 
</span><ins>+using SVGAnimatedPreserveAspectRatio = SVGAnimatedPropertyTearOff&lt;SVGPropertyTearOff&lt;SVGPreserveAspectRatio&gt;&gt;;
+
</ins><span class="cx"> // Helper macros to declare/define a SVGAnimatedPreserveAspectRatio object
</span><span class="cx"> #define DECLARE_ANIMATED_PRESERVEASPECTRATIO(UpperProperty, LowerProperty) \
</span><span class="cx"> DECLARE_ANIMATED_PROPERTY(SVGAnimatedPreserveAspectRatio, SVGPreserveAspectRatio, UpperProperty, LowerProperty, )
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedRecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedRect.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedRect.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedRect.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -27,8 +27,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef SVGAnimatedPropertyTearOff&lt;FloatRect&gt; SVGAnimatedRect;
</del><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
</ins><span class="cx"> 
</span><ins>+using SVGAnimatedRect = SVGAnimatedPropertyTearOff&lt;SVGPropertyTearOff&lt;FloatRect&gt;&gt;;
+
</ins><span class="cx"> // Helper macros to declare/define a SVGAnimatedRect object
</span><span class="cx"> #define DECLARE_ANIMATED_RECT(UpperProperty, LowerProperty) \
</span><span class="cx"> DECLARE_ANIMATED_PROPERTY(SVGAnimatedRect, FloatRect, UpperProperty, LowerProperty, )
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedType.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedType.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedType.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedType::createAngleAndEnumeration(std::unique_ptr&lt;std::pair&lt;SVGAngle, unsigned&gt;&gt; angleAndEnumeration)
</del><ins>+std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedType::createAngleAndEnumeration(std::unique_ptr&lt;std::pair&lt;SVGAngleValue, unsigned&gt;&gt; angleAndEnumeration)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(angleAndEnumeration);
</span><span class="cx">     auto animatedType = std::make_unique&lt;SVGAnimatedType&gt;(AnimatedAngle);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedType.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedType.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGAnimatedType.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -21,7 +21,7 @@
</span><span class="cx"> #define SVGAnimatedType_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><del>-#include &quot;SVGAngle.h&quot;
</del><ins>+#include &quot;SVGAngleValue.h&quot;
</ins><span class="cx"> #include &quot;SVGColor.h&quot;
</span><span class="cx"> #include &quot;SVGLength.h&quot;
</span><span class="cx"> #include &quot;SVGLengthList.h&quot;
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">     SVGAnimatedType(AnimatedPropertyType);
</span><span class="cx">     virtual ~SVGAnimatedType();
</span><span class="cx"> 
</span><del>-    static std::unique_ptr&lt;SVGAnimatedType&gt; createAngleAndEnumeration(std::unique_ptr&lt;std::pair&lt;SVGAngle, unsigned&gt;&gt;);
</del><ins>+    static std::unique_ptr&lt;SVGAnimatedType&gt; createAngleAndEnumeration(std::unique_ptr&lt;std::pair&lt;SVGAngleValue, unsigned&gt;&gt;);
</ins><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createBoolean(std::unique_ptr&lt;bool&gt;);
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createColor(std::unique_ptr&lt;Color&gt;);
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createEnumeration(std::unique_ptr&lt;unsigned&gt;);
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx">     AnimatedPropertyType type() const { return m_type; }
</span><span class="cx"> 
</span><span class="cx">     // Non-mutable accessors.
</span><del>-    const std::pair&lt;SVGAngle, unsigned&gt;&amp; angleAndEnumeration() const
</del><ins>+    const std::pair&lt;SVGAngleValue, unsigned&gt;&amp; angleAndEnumeration() const
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_type == AnimatedAngle);
</span><span class="cx">         return *m_data.angleAndEnumeration;
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Mutable accessors.
</span><del>-    std::pair&lt;SVGAngle, unsigned&gt;&amp; angleAndEnumeration()
</del><ins>+    std::pair&lt;SVGAngleValue, unsigned&gt;&amp; angleAndEnumeration()
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_type == AnimatedAngle);
</span><span class="cx">         return *m_data.angleAndEnumeration;
</span><span class="lines">@@ -280,7 +280,7 @@
</span><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        std::pair&lt;SVGAngle, unsigned&gt;* angleAndEnumeration;
</del><ins>+        std::pair&lt;SVGAngleValue, unsigned&gt;* angleAndEnumeration;
</ins><span class="cx">         bool* boolean;
</span><span class="cx">         Color* color;
</span><span class="cx">         unsigned* enumeration;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGComponentTransferFunctionElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGComponentTransferFunctionElement.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> #include &quot;SVGAnimatedEnumeration.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedNumber.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedNumberList.h&quot;
</span><ins>+#include &quot;SVGElement.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLengthList.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthList.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGLengthList.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -25,6 +25,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
+
</ins><span class="cx"> class SVGLengthList final : public Vector&lt;SVGLength&gt; {
</span><span class="cx"> public:
</span><span class="cx">     void parse(const String&amp; value, SVGLengthMode);
</span><span class="lines">@@ -32,7 +35,8 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGLengthList&gt; {
</span><del>-    typedef SVGLength ListItemType;
</del><ins>+    using ListItemType = SVGLength;
+    using ListItemTearOff = SVGPropertyTearOff&lt;SVGLength&gt;;
</ins><span class="cx"> 
</span><span class="cx">     static SVGLengthList initialValue() { return SVGLengthList(); }
</span><span class="cx">     static String toString(const SVGLengthList&amp; type) { return type.valueAsString(); }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMarkerElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMarkerElement.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMarkerElement.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGMarkerElement.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::orientAttr) {
</span><del>-        SVGAngle angle;
</del><ins>+        SVGAngleValue angle;
</ins><span class="cx">         auto orientType = SVGPropertyTraits&lt;SVGMarkerOrientType&gt;::fromString(value, angle);
</span><span class="cx">         if (orientType &gt; 0)
</span><span class="cx">             setOrientTypeBaseValue(orientType);
</span><span class="lines">@@ -189,7 +189,7 @@
</span><span class="cx">         object-&gt;setNeedsLayout();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGMarkerElement::setOrient(SVGMarkerOrientType orientType, const SVGAngle&amp; angle)
</del><ins>+void SVGMarkerElement::setOrient(SVGMarkerOrientType orientType, const SVGAngleValue&amp; angle)
</ins><span class="cx"> {
</span><span class="cx">     setOrientTypeBaseValue(orientType);
</span><span class="cx">     setOrientAngleBaseValue(angle);
</span><span class="lines">@@ -206,9 +206,9 @@
</span><span class="cx">     setOrient(SVGMarkerOrientAuto, { });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGMarkerElement::setOrientToAngle(const SVGAngle&amp; angle)
</del><ins>+void SVGMarkerElement::setOrientToAngle(SVGAngle&amp; angle)
</ins><span class="cx"> {
</span><del>-    setOrient(SVGMarkerOrientAngle, angle);
</del><ins>+    setOrient(SVGMarkerOrientAngle, angle.propertyReference());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderPtr&lt;RenderElement&gt; SVGMarkerElement::createElementRenderer(RenderStyle&amp;&amp; style, const RenderTreePosition&amp;)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMarkerElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMarkerElement.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMarkerElement.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGMarkerElement.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> 
</span><span class="cx">     // toString is not needed, synchronizeOrientType() handles this on its own.
</span><span class="cx"> 
</span><del>-    static SVGMarkerOrientType fromString(const String&amp; value, SVGAngle&amp; angle)
</del><ins>+    static SVGMarkerOrientType fromString(const String&amp; value, SVGAngleValue&amp; angle)
</ins><span class="cx">     {
</span><span class="cx">         if (value == &quot;auto&quot;)
</span><span class="cx">             return SVGMarkerOrientAuto;
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx">     AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const;
</span><span class="cx"> 
</span><span class="cx">     void setOrientToAuto();
</span><del>-    void setOrientToAngle(const SVGAngle&amp;);
</del><ins>+    void setOrientToAngle(SVGAngle&amp;);
</ins><span class="cx"> 
</span><span class="cx">     static const SVGPropertyInfo* orientTypePropertyInfo();
</span><span class="cx"> 
</span><span class="lines">@@ -141,7 +141,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool selfHasRelativeLengths() const override;
</span><span class="cx"> 
</span><del>-    void setOrient(SVGMarkerOrientType, const SVGAngle&amp;);
</del><ins>+    void setOrient(SVGMarkerOrientType, const SVGAngleValue&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void synchronizeOrientType();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGNumberListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGNumberList.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGNumberList.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGNumberList.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -25,6 +25,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
+
</ins><span class="cx"> class SVGNumberList final : public Vector&lt;float&gt; {
</span><span class="cx"> public:
</span><span class="cx">     void parse(const String&amp;);
</span><span class="lines">@@ -32,10 +35,11 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGNumberList&gt; {
</span><del>-    typedef float ListItemType;
-
</del><span class="cx">     static SVGNumberList initialValue() { return SVGNumberList(); }
</span><span class="cx">     static String toString(const SVGNumberList&amp; type) { return type.valueAsString(); }
</span><ins>+
+    using ListItemType = float;
+    using ListItemTearOff = SVGPropertyTearOff&lt;float&gt;;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathSegListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathSegList.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathSegList.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGPathSegList.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -29,6 +29,9 @@
</span><span class="cx"> 
</span><span class="cx"> class SVGElement;
</span><span class="cx"> 
</span><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
+
</ins><span class="cx"> class SVGPathSegList : public Vector&lt;RefPtr&lt;SVGPathSeg&gt;&gt; {
</span><span class="cx"> public:
</span><span class="cx">     explicit SVGPathSegList(SVGPathSegRole role)
</span><span class="lines">@@ -47,7 +50,9 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGPathSegList&gt; {
</span><span class="cx">     static SVGPathSegList initialValue() { return SVGPathSegList(PathSegUndefinedRole); }
</span><del>-    typedef RefPtr&lt;SVGPathSeg&gt; ListItemType;
</del><ins>+
+    using ListItemType = RefPtr&lt;SVGPathSeg&gt;;
+    using ListItemTearOff = SVGPropertyTearOff&lt;RefPtr&lt;SVGPathSeg&gt;&gt;;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPointListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPointList.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPointList.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGPointList.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -26,6 +26,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
+
</ins><span class="cx"> class SVGPointList final : public Vector&lt;SVGPoint&gt; {
</span><span class="cx"> public:
</span><span class="cx">     String valueAsString() const;
</span><span class="lines">@@ -33,7 +36,9 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGPointList&gt; {
</span><span class="cx">     static SVGPointList initialValue() { return SVGPointList(); }
</span><del>-    typedef SVGPoint ListItemType;
</del><ins>+
+    using ListItemType = SVGPoint;
+    using ListItemTearOff = SVGPropertyTearOff&lt;SVGPoint&gt;;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGSVGElement.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;RenderSVGViewportContainer.h&quot;
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;SMILTimeContainer.h&quot;
</span><ins>+#include &quot;SVGAngle.h&quot;
</ins><span class="cx"> #include &quot;SVGViewElement.h&quot;
</span><span class="cx"> #include &quot;SVGViewSpec.h&quot;
</span><span class="cx"> #include &quot;StaticNodeList.h&quot;
</span><span class="lines">@@ -350,9 +351,9 @@
</span><span class="cx">     return { };
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGAngle SVGSVGElement::createSVGAngle()
</del><ins>+Ref&lt;SVGAngle&gt; SVGSVGElement::createSVGAngle()
</ins><span class="cx"> {
</span><del>-    return { };
</del><ins>+    return SVGAngle::create();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> SVGPoint SVGSVGElement::createSVGPoint()
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGSVGElement.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class SVGAngle;
</ins><span class="cx"> class SVGViewSpec;
</span><span class="cx"> class SMILTimeContainer;
</span><span class="cx"> 
</span><span class="lines">@@ -90,7 +91,7 @@
</span><span class="cx"> 
</span><span class="cx">     static float createSVGNumber();
</span><span class="cx">     static SVGLength createSVGLength();
</span><del>-    static SVGAngle createSVGAngle();
</del><ins>+    static Ref&lt;SVGAngle&gt; createSVGAngle();
</ins><span class="cx">     static SVGPoint createSVGPoint();
</span><span class="cx">     static SVGMatrix createSVGMatrix();
</span><span class="cx">     static FloatRect createSVGRect();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.idl (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.idl        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGSVGElement.idl        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> 
</span><span class="cx">     SVGNumber createSVGNumber();
</span><span class="cx">     SVGLength createSVGLength();
</span><del>-    SVGAngle createSVGAngle();
</del><ins>+    [NewObject] SVGAngle createSVGAngle();
</ins><span class="cx">     SVGPoint createSVGPoint();
</span><span class="cx">     SVGMatrix createSVGMatrix();
</span><span class="cx">     SVGRect createSVGRect();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGStringListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGStringList.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGStringList.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGStringList.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -28,6 +28,9 @@
</span><span class="cx"> 
</span><span class="cx"> class SVGElement;
</span><span class="cx"> 
</span><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
+
</ins><span class="cx"> class SVGStringList final : public Vector&lt;String&gt; {
</span><span class="cx"> public:
</span><span class="cx">     SVGStringList(const QualifiedName&amp; attributeName)
</span><span class="lines">@@ -48,7 +51,8 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGStringList&gt; {
</span><del>-    typedef String ListItemType;
</del><ins>+    using ListItemType = String;
+    using ListItemTearOff = SVGPropertyTearOff&lt;String&gt;;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransform.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransform.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGTransform.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx"> #include &quot;FloatConversion.h&quot;
</span><span class="cx"> #include &quot;FloatPoint.h&quot;
</span><span class="cx"> #include &quot;FloatSize.h&quot;
</span><del>-#include &quot;SVGAngle.h&quot;
</del><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #include &lt;wtf/text/StringBuilder.h&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformList.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformList.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGTransformList.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -26,6 +26,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+template&lt;typename T&gt; 
+class SVGPropertyTearOff;
+
</ins><span class="cx"> class SVGTransformList final : public Vector&lt;SVGTransform, 1&gt; {
</span><span class="cx"> public:
</span><span class="cx">     SVGTransform createSVGTransformFromMatrix(const SVGMatrix&amp;) const;
</span><span class="lines">@@ -40,7 +43,9 @@
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGTransformList&gt; {
</span><span class="cx">     static SVGTransformList initialValue() { return SVGTransformList(); }
</span><span class="cx">     static String toString(const SVGTransformList&amp; type) { return type.valueAsString(); }
</span><del>-    typedef SVGTransform ListItemType;
</del><ins>+
+    using ListItemType = SVGTransform;
+    using ListItemTearOff = SVGPropertyTearOff&lt;SVGTransform&gt;;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGViewSpeccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGViewSpec.cpp (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGViewSpec.cpp        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/SVGViewSpec.cpp        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Document.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedTransformList.h&quot;
</span><ins>+#include &quot;SVGElement.h&quot;
</ins><span class="cx"> #include &quot;SVGFitToViewBox.h&quot;
</span><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -18,8 +18,7 @@
</span><span class="cx">  * Boston, MA 02110-1301, USA.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef SVGAnimatedPropertyTearOff_h
-#define SVGAnimatedPropertyTearOff_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;SVGAnimatedProperty.h&quot;
</span><span class="cx"> #include &quot;SVGPropertyTearOff.h&quot;
</span><span class="lines">@@ -26,11 +25,12 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename PropertyType&gt;
</del><ins>+template&lt;typename T&gt;
</ins><span class="cx"> class SVGAnimatedPropertyTearOff final : public SVGAnimatedProperty {
</span><span class="cx"> public:
</span><del>-    typedef SVGPropertyTearOff&lt;PropertyType&gt; PropertyTearOff;
-    typedef PropertyType ContentType;
</del><ins>+    using PropertyTearOff = T;
+    using PropertyType = typename PropertyTearOff::PropertyType;
+    using ContentType = PropertyType;
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;PropertyTearOff&gt; baseVal()
</span><span class="cx">     {
</span><span class="lines">@@ -62,10 +62,10 @@
</span><span class="cx">             m_animVal = nullptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static Ref&lt;SVGAnimatedPropertyTearOff&lt;PropertyType&gt;&gt; create(SVGElement* contextElement, const QualifiedName&amp; attributeName, AnimatedPropertyType animatedPropertyType, PropertyType&amp; property)
</del><ins>+    static Ref&lt;SVGAnimatedPropertyTearOff&lt;PropertyTearOff&gt;&gt; create(SVGElement* contextElement, const QualifiedName&amp; attributeName, AnimatedPropertyType animatedPropertyType, PropertyType&amp; property)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(contextElement);
</span><del>-        return adoptRef(*new SVGAnimatedPropertyTearOff&lt;PropertyType&gt;(contextElement, attributeName, animatedPropertyType, property));
</del><ins>+        return adoptRef(*new SVGAnimatedPropertyTearOff&lt;PropertyTearOff&gt;(contextElement, attributeName, animatedPropertyType, property));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     PropertyType&amp; currentAnimatedValue()
</span><span class="lines">@@ -121,5 +121,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span><del>-
-#endif // SVGAnimatedPropertyTearOff_h
</del></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGListPropertyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGListProperty.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGListProperty.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/properties/SVGListProperty.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">     typedef SVGListProperty&lt;PropertyType&gt; Self;
</span><span class="cx"> 
</span><span class="cx">     using ListItemType = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType;
</span><del>-    using ListItemTearOff = SVGPropertyTearOff&lt;ListItemType&gt;;
</del><ins>+    using ListItemTearOff = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemTearOff;
</ins><span class="cx">     using PtrListItemTearOff = RefPtr&lt;ListItemTearOff&gt;;
</span><span class="cx">     using AnimatedListPropertyTearOff = SVGAnimatedListPropertyTearOff&lt;PropertyType&gt;;
</span><span class="cx">     using ListWrapperCache = typename AnimatedListPropertyTearOff::ListWrapperCache;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGListPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -26,14 +26,14 @@
</span><span class="cx"> template&lt;typename PropertyType&gt;
</span><span class="cx"> class SVGListPropertyTearOff : public SVGListProperty&lt;PropertyType&gt; {
</span><span class="cx"> public:
</span><del>-    typedef SVGListProperty&lt;PropertyType&gt; Base;
-    typedef SVGListPropertyTearOff&lt;PropertyType&gt; Self;
</del><ins>+    using Base = SVGListProperty&lt;PropertyType&gt;;
+    using Self = SVGListPropertyTearOff&lt;PropertyType&gt;;
</ins><span class="cx"> 
</span><del>-    typedef typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType ListItemType;
-    typedef SVGPropertyTearOff&lt;ListItemType&gt; ListItemTearOff;
-    typedef RefPtr&lt;ListItemTearOff&gt; PtrListItemTearOff;
-    typedef SVGAnimatedListPropertyTearOff&lt;PropertyType&gt; AnimatedListPropertyTearOff;
-    typedef typename SVGAnimatedListPropertyTearOff&lt;PropertyType&gt;::ListWrapperCache ListWrapperCache;
</del><ins>+    using ListItemType = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType;
+    using ListItemTearOff = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemTearOff;
+    using PtrListItemTearOff = RefPtr&lt;ListItemTearOff&gt;;
+    using AnimatedListPropertyTearOff = SVGAnimatedListPropertyTearOff&lt;PropertyType&gt;;
+    using ListWrapperCache = typename SVGAnimatedListPropertyTearOff&lt;PropertyType&gt;::ListWrapperCache;
</ins><span class="cx"> 
</span><span class="cx">     using Base::m_role;
</span><span class="cx">     using Base::m_values;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h (208479 => 208480)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h        2016-11-09 21:27:56 UTC (rev 208479)
+++ trunk/Source/WebCore/svg/properties/SVGPropertyTearOff.h        2016-11-09 21:30:41 UTC (rev 208480)
</span><span class="lines">@@ -20,22 +20,25 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &quot;ExceptionOr.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedProperty.h&quot;
</span><del>-#include &quot;SVGElement.h&quot;
</del><span class="cx"> #include &quot;SVGProperty.h&quot;
</span><span class="cx"> #include &lt;wtf/WeakPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class SVGElement;
+
</ins><span class="cx"> class SVGPropertyTearOffBase : public SVGProperty {
</span><span class="cx"> public:
</span><span class="cx">     virtual void detachWrapper() = 0;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-template&lt;typename PropertyType&gt;
</del><ins>+template&lt;typename T&gt;
</ins><span class="cx"> class SVGPropertyTearOff : public SVGPropertyTearOffBase {
</span><span class="cx"> public:
</span><del>-    typedef SVGPropertyTearOff&lt;PropertyType&gt; Self;
</del><ins>+    using PropertyType = T;
+    using Self = SVGPropertyTearOff&lt;PropertyType&gt;;
</ins><span class="cx"> 
</span><span class="cx">     // Used for child types (baseVal/animVal) of a SVGAnimated* property (for example: SVGAnimatedLength::baseVal()).
</span><span class="cx">     // Also used for list tear offs (for example: text.x.baseVal.getItem(0)).
</span><span class="lines">@@ -56,7 +59,7 @@
</span><span class="cx">         return adoptRef(*new Self(initialValue));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;Self&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
</del><ins>+    template&lt;typename U&gt; static ExceptionOr&lt;Ref&lt;Self&gt;&gt; create(ExceptionOr&lt;U&gt;&amp;&amp; initialValue)
</ins><span class="cx">     {
</span><span class="cx">         if (initialValue.hasException())
</span><span class="cx">             return initialValue.releaseException();
</span></span></pre>
</div>
</div>

</body>
</html>