<!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>[199265] trunk</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>Improve IDL support for object arguments that are neither optional nor nullable
https://bugs.webkit.org/show_bug.cgi?id=156149

Reviewed by Chris Dumez.

Source/WebCore:

After this patch, we are almost ready to change some more DOM functions to
use references instead of pointers. Remaining blocking issue is lack of support
for ShouldPassWrapperByReference in the gobject bindings.

* bindings/objc/ExceptionHandlers.h: Add NO_RETURN to raiseDOMException.
Added a new raiseTypeErrorException. Re-indented header and removed unneeded
include and forward declarations.

* bindings/objc/ExceptionHandlers.mm:
(WebCore::raiseDOMException): Added RELEASE_ASSERT_NOT_REACHED so the compiler
will understand this is NO_RETURN. Also updated FIXME comment.
(WebCore::raiseTypeErrorException): Added.

* bindings/scripts/CodeGenerator.pm: Removed unneeded code that allows the type
&quot;AtomicString&quot; in IDL files.
(ShouldPassWrapperByReference): Added. Contains the logic from the function in
the JavaScript code generator that was named IsPointerParameterPassedByReference,
minus a couple checks that are unneeded. For use in other code generators so they
are all consistent about how they call the DOM implementation.

* bindings/scripts/CodeGeneratorGObject.pm:
(SkipFunction): Removed support for unused CustomBinding extended attribute.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader): Removed support for unused CustomBinding extended attribute.
(GenerateImplementation): Ditto. Also changed type checking code to throw a
type error in a more efficient way, using throwVMTypeError directly.
(GenerateParametersCheck): Rearranged code a bit so that arguments that need to
be passed in unusual ways are handled all in one place. Use WTFMove for newly
created NodeFilter objects. Simplified the reference logic so it doesn't need
to do an additional check to see if a type is a callback. Also changed type
checking code to throw a type error in a more efficient way, using throwVMTypeError
directly. Also corrected mistake where null checking code was throwing
TYPE_MISMATCH_ERR instead of a type error.
(GetNativeType): Coding style tweak.
(ShouldPassWrapperByReference): Renamed from IsPointerParameterPassedByReference.
Changed to call underlying ShouldPassWrapperByReference function in the language-
independent code generator.
(GenerateConstructorDefinition): Updated for name change.

* bindings/scripts/CodeGeneratorObjC.pm:
(SkipFunction): Removed support for unused CustomBinding extended attribute.
(GenerateImplementation): Added code to null check and pass a reference when
ShouldPassWrapperByReference returns true.

* bindings/scripts/IDLAttributes.txt: Sorted in the AppleCopyright and
UsePointersEvenForNonNullableObjectArguments arguments. Removed the unused
CPPPureInterface and CustomBinding attributes.

* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Regenerated test results.
* bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
* bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
* bindings/scripts/test/JS/JSTestObj.h: Ditto.
* bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
* bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
* bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm: Ditto.
* bindings/scripts/test/ObjC/DOMTestCallback.mm: Ditto.
* bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm: Ditto.
* bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
* bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm: Ditto.
* bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.

* bindings/scripts/test/TestObj.idl: Removed test for CustomBinding.

* dom/DOMImplementation.idl: Fixed #if so that only the return type is different
between JavaScript and the other bindings. Without this change, the different
bindings got different results for ShouldPassWrapperByReference. Also formatted
functions all on a single line.

* dom/EventListener.idl: Removed CPPPureInterface, since it had no effect.
* dom/EventTarget.idl: Ditto.

LayoutTests:

* fast/canvas/canvas-path-addPath-expected.txt: Updated expected result to expect
TypeError rather than TYPE_MISMATCH_ERR. A progression.
* fast/text/font-face-set-javascript-expected.txt: Ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastcanvascanvaspathaddPathexpectedtxt">trunk/LayoutTests/fast/canvas/canvas-path-addPath-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasttextfontfacesetjavascriptexpectedtxt">trunk/LayoutTests/fast/text/font-face-set-javascript-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcExceptionHandlersh">trunk/Source/WebCore/bindings/objc/ExceptionHandlers.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcExceptionHandlersmm">trunk/Source/WebCore/bindings/objc/ExceptionHandlers.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorGObjectpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorObjCpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsIDLAttributestxt">trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestActiveDOMObjectmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestCallbackmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallback.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestCallbackFunctionmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestInterfacemm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestInterface.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestMediaQueryListListenermm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestObjmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestObjidl">trunk/Source/WebCore/bindings/scripts/test/TestObj.idl</a></li>
<li><a href="#trunkSourceWebCoredomDOMImplementationidl">trunk/Source/WebCore/dom/DOMImplementation.idl</a></li>
<li><a href="#trunkSourceWebCoredomEventListeneridl">trunk/Source/WebCore/dom/EventListener.idl</a></li>
<li><a href="#trunkSourceWebCoredomEventTargetidl">trunk/Source/WebCore/dom/EventTarget.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/LayoutTests/ChangeLog        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-04-07  Darin Adler  &lt;darin@apple.com&gt;
+
+        Improve IDL support for object arguments that are neither optional nor nullable
+        https://bugs.webkit.org/show_bug.cgi?id=156149
+
+        Reviewed by Chris Dumez.
+
+        * fast/canvas/canvas-path-addPath-expected.txt: Updated expected result to expect
+        TypeError rather than TYPE_MISMATCH_ERR. A progression.
+        * fast/text/font-face-set-javascript-expected.txt: Ditto.
+
</ins><span class="cx"> 2016-04-08  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: XHRs and Web Worker scripts are not searchable
</span></span></pre></div>
<a id="trunkLayoutTestsfastcanvascanvaspathaddPathexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/canvas/canvas-path-addPath-expected.txt (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/canvas/canvas-path-addPath-expected.txt        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/LayoutTests/fast/canvas/canvas-path-addPath-expected.txt        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -31,12 +31,12 @@
</span><span class="cx"> PASS refTest(result.data, expected.data) is true
</span><span class="cx"> 
</span><span class="cx"> Various tests of invalid values.
</span><del>-PASS pathA.addPath(matrix, pathB) threw exception Error: TypeMismatchError: DOM Exception 17.
-PASS pathA.addPath(pathB, ctx.canvas) threw exception Error: TypeMismatchError: DOM Exception 17.
-PASS pathA.addPath(pathB, null) threw exception Error: TypeMismatchError: DOM Exception 17.
-PASS pathA.addPath(pathB, undefined) threw exception Error: TypeMismatchError: DOM Exception 17.
-PASS pathA.addPath(pathB, 0) threw exception Error: TypeMismatchError: DOM Exception 17.
-PASS pathA.addPath(pathB, &quot;0&quot;) threw exception Error: TypeMismatchError: DOM Exception 17.
</del><ins>+PASS pathA.addPath(matrix, pathB) threw exception TypeError: Type error.
+PASS pathA.addPath(pathB, ctx.canvas) threw exception TypeError: Type error.
+PASS pathA.addPath(pathB, null) threw exception TypeError: Type error.
+PASS pathA.addPath(pathB, undefined) threw exception TypeError: Type error.
+PASS pathA.addPath(pathB, 0) threw exception TypeError: Type error.
+PASS pathA.addPath(pathB, &quot;0&quot;) threw exception TypeError: Type error.
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextfontfacesetjavascriptexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/text/font-face-set-javascript-expected.txt (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-face-set-javascript-expected.txt        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/LayoutTests/fast/text/font-face-set-javascript-expected.txt        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -13,7 +13,7 @@
</span><span class="cx"> PASS item.done is true
</span><span class="cx"> PASS fontFaceSet.add(fontFace2) is fontFaceSet
</span><span class="cx"> PASS fontFaceSet.size is 2
</span><del>-PASS fontFaceSet.add(null) threw exception Error: TypeMismatchError: DOM Exception 17.
</del><ins>+PASS fontFaceSet.add(null) threw exception TypeError: Type error.
</ins><span class="cx"> PASS item.done is false
</span><span class="cx"> PASS item.value is fontFace1
</span><span class="cx"> PASS item.done is false
</span><span class="lines">@@ -21,10 +21,10 @@
</span><span class="cx"> PASS item.done is true
</span><span class="cx"> PASS fontFaceSet.delete(fontFace1) is true
</span><span class="cx"> PASS fontFaceSet.delete(fontFace3) is false
</span><del>-PASS fontFaceSet.delete(null) threw exception Error: TypeMismatchError: DOM Exception 17.
</del><ins>+PASS fontFaceSet.delete(null) threw exception TypeError: Type error.
</ins><span class="cx"> PASS fontFaceSet.has(fontFace1) is false
</span><span class="cx"> PASS fontFaceSet.has(fontFace2) is true
</span><del>-PASS fontFaceSet.has(null) threw exception Error: TypeMismatchError: DOM Exception 17.
</del><ins>+PASS fontFaceSet.has(null) threw exception TypeError: Type error.
</ins><span class="cx"> PASS fontFaceSet.size is 0
</span><span class="cx"> PASS fontFaceSet.values().next().done is true
</span><span class="cx"> PASS fontFaceSet.check('garbage') threw exception Error: SyntaxError: DOM Exception 12.
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/ChangeLog        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -1,3 +1,83 @@
</span><ins>+2016-04-07  Darin Adler  &lt;darin@apple.com&gt;
+
+        Improve IDL support for object arguments that are neither optional nor nullable
+        https://bugs.webkit.org/show_bug.cgi?id=156149
+
+        Reviewed by Chris Dumez.
+
+        After this patch, we are almost ready to change some more DOM functions to
+        use references instead of pointers. Remaining blocking issue is lack of support
+        for ShouldPassWrapperByReference in the gobject bindings.
+
+        * bindings/objc/ExceptionHandlers.h: Add NO_RETURN to raiseDOMException.
+        Added a new raiseTypeErrorException. Re-indented header and removed unneeded
+        include and forward declarations.
+
+        * bindings/objc/ExceptionHandlers.mm:
+        (WebCore::raiseDOMException): Added RELEASE_ASSERT_NOT_REACHED so the compiler
+        will understand this is NO_RETURN. Also updated FIXME comment.
+        (WebCore::raiseTypeErrorException): Added.
+
+        * bindings/scripts/CodeGenerator.pm: Removed unneeded code that allows the type
+        &quot;AtomicString&quot; in IDL files.
+        (ShouldPassWrapperByReference): Added. Contains the logic from the function in
+        the JavaScript code generator that was named IsPointerParameterPassedByReference,
+        minus a couple checks that are unneeded. For use in other code generators so they
+        are all consistent about how they call the DOM implementation.
+
+        * bindings/scripts/CodeGeneratorGObject.pm:
+        (SkipFunction): Removed support for unused CustomBinding extended attribute.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader): Removed support for unused CustomBinding extended attribute.
+        (GenerateImplementation): Ditto. Also changed type checking code to throw a
+        type error in a more efficient way, using throwVMTypeError directly.
+        (GenerateParametersCheck): Rearranged code a bit so that arguments that need to
+        be passed in unusual ways are handled all in one place. Use WTFMove for newly
+        created NodeFilter objects. Simplified the reference logic so it doesn't need
+        to do an additional check to see if a type is a callback. Also changed type
+        checking code to throw a type error in a more efficient way, using throwVMTypeError
+        directly. Also corrected mistake where null checking code was throwing
+        TYPE_MISMATCH_ERR instead of a type error.
+        (GetNativeType): Coding style tweak.
+        (ShouldPassWrapperByReference): Renamed from IsPointerParameterPassedByReference.
+        Changed to call underlying ShouldPassWrapperByReference function in the language-
+        independent code generator.
+        (GenerateConstructorDefinition): Updated for name change.
+
+        * bindings/scripts/CodeGeneratorObjC.pm:
+        (SkipFunction): Removed support for unused CustomBinding extended attribute.
+        (GenerateImplementation): Added code to null check and pass a reference when
+        ShouldPassWrapperByReference returns true.
+
+        * bindings/scripts/IDLAttributes.txt: Sorted in the AppleCopyright and
+        UsePointersEvenForNonNullableObjectArguments arguments. Removed the unused
+        CPPPureInterface and CustomBinding attributes.
+
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Regenerated test results.
+        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
+        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
+        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
+        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
+        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm: Ditto.
+        * bindings/scripts/test/ObjC/DOMTestCallback.mm: Ditto.
+        * bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm: Ditto.
+        * bindings/scripts/test/ObjC/DOMTestInterface.mm: Ditto.
+        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm: Ditto.
+        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
+
+        * bindings/scripts/test/TestObj.idl: Removed test for CustomBinding.
+
+        * dom/DOMImplementation.idl: Fixed #if so that only the return type is different
+        between JavaScript and the other bindings. Without this change, the different
+        bindings got different results for ShouldPassWrapperByReference. Also formatted
+        functions all on a single line.
+
+        * dom/EventListener.idl: Removed CPPPureInterface, since it had no effect.
+        * dom/EventTarget.idl: Ditto.
+
</ins><span class="cx"> 2016-04-08  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WebIDL] Add support for [ExportMacro=XXX] IDL extended attribute
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsobjcExceptionHandlersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/objc/ExceptionHandlers.h (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/objc/ExceptionHandlers.h        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/objc/ExceptionHandlers.h        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -26,23 +26,21 @@
</span><span class="cx"> #ifndef ExceptionHandlers_h
</span><span class="cx"> #define ExceptionHandlers_h
</span><span class="cx"> 
</span><del>-#include &lt;wtf/Assertions.h&gt;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><del>-    typedef int ExceptionCode;
-    
-    class FrameSelection;
-    class Range;
</del><ins>+typedef int ExceptionCode;
</ins><span class="cx"> 
</span><del>-    void raiseDOMException(ExceptionCode);
</del><ins>+NO_RETURN void raiseDOMException(ExceptionCode);
+NO_RETURN void raiseTypeErrorException();
</ins><span class="cx"> 
</span><del>-    inline void raiseOnDOMError(ExceptionCode ec) 
-    {
-        if (ec) 
-            raiseDOMException(ec);
-    }
</del><ins>+void raiseOnDOMError(ExceptionCode);
</ins><span class="cx"> 
</span><ins>+inline void raiseOnDOMError(ExceptionCode code)
+{
+    if (code)
+        raiseDOMException(code);
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ExceptionHandlers_h
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsobjcExceptionHandlersmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/objc/ExceptionHandlers.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/objc/ExceptionHandlers.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/objc/ExceptionHandlers.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -42,8 +42,8 @@
</span><span class="cx"> 
</span><span class="cx">     ExceptionCodeDescription description(ec);
</span><span class="cx"> 
</span><ins>+    // FIXME: This should use type and code exclusively and not try to use typeName.
</ins><span class="cx">     NSString *exceptionName;
</span><del>-    // FIXME: We can use the enum to do these comparisons faster.
</del><span class="cx">     if (strcmp(description.typeName, &quot;DOM Range&quot;) == 0)
</span><span class="cx">         exceptionName = DOMRangeException;
</span><span class="cx">     else if (strcmp(description.typeName, &quot;DOM Events&quot;) == 0)
</span><span class="lines">@@ -67,6 +67,13 @@
</span><span class="cx">     [userInfo release];
</span><span class="cx"> 
</span><span class="cx">     [exception raise];
</span><ins>+
+    RELEASE_ASSERT_NOT_REACHED();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void raiseTypeErrorException()
+{
+    raiseDOMException(TypeError);
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx"> 
</span><span class="cx"> my %primitiveTypeHash = ( &quot;boolean&quot; =&gt; 1, &quot;void&quot; =&gt; 1, &quot;Date&quot; =&gt; 1);
</span><span class="cx"> 
</span><del>-my %stringTypeHash = (&quot;DOMString&quot; =&gt; 1, &quot;AtomicString&quot; =&gt; 1);
</del><ins>+my %stringTypeHash = (&quot;DOMString&quot; =&gt; 1);
</ins><span class="cx"> 
</span><span class="cx"> # WebCore types used directly in IDL files.
</span><span class="cx"> my %webCoreTypeHash = (
</span><span class="lines">@@ -886,4 +886,18 @@
</span><span class="cx">     return $found;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub ShouldPassWrapperByReference
+{
+    my $object = shift;
+    my $parameter = shift;
+    my $interface = shift;
+
+    return 0 if $parameter-&gt;isVariadic;
+    return 0 if $parameter-&gt;isNullable;
+    return 0 if $parameter-&gt;isOptional and $parameter-&gt;extendedAttributes-&gt;{&quot;Default&quot;} and $parameter-&gt;extendedAttributes-&gt;{&quot;Default&quot;} eq &quot;Undefined&quot;;
+    return 0 if !$object-&gt;IsWrapperType($parameter-&gt;type) &amp;&amp; !$object-&gt;IsTypedArrayType($parameter-&gt;type);
+    return 0 if $interface-&gt;extendedAttributes-&gt;{&quot;UsePointersEvenForNonNullableObjectArguments&quot;};
+    return 1;
+}
+
</ins><span class="cx"> 1;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorGObjectpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -299,7 +299,7 @@
</span><span class="cx"> 
</span><span class="cx">     my $functionName = &quot;webkit_dom_&quot; . $decamelize . &quot;_&quot; . $prefix . decamelize($function-&gt;signature-&gt;name);
</span><span class="cx">     my $functionReturnType = $prefix eq &quot;set_&quot; ? &quot;void&quot; : $function-&gt;signature-&gt;type;
</span><del>-    my $isCustomFunction = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Custom&quot;} || $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CustomBinding&quot;};
</del><ins>+    my $isCustomFunction = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Custom&quot;};
</ins><span class="cx">     my $callWith = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CallWith&quot;};
</span><span class="cx">     my $isUnsupportedCallWith = $codeGenerator-&gt;ExtendedAttributeContains($callWith, &quot;ScriptArguments&quot;) || $codeGenerator-&gt;ExtendedAttributeContains($callWith, &quot;CallStack&quot;) || $codeGenerator-&gt;ExtendedAttributeContains($callWith, &quot;FirstWindow&quot;) || $codeGenerator-&gt;ExtendedAttributeContains($callWith, &quot;ActiveWindow&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -1154,7 +1154,7 @@
</span><span class="cx">     foreach my $function (@{$interface-&gt;functions}) {
</span><span class="cx">         $numCustomFunctions++ if HasCustomMethod($function-&gt;signature-&gt;extendedAttributes);
</span><span class="cx"> 
</span><del>-        if ($function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;ForwardDeclareInHeader&quot;} or $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CustomBinding&quot;}) {
</del><ins>+        if ($function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;ForwardDeclareInHeader&quot;}) {
</ins><span class="cx">             $hasForwardDeclaringFunctions = 1;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -1293,7 +1293,7 @@
</span><span class="cx">         push(@headerContent,&quot;// Functions\n\n&quot;);
</span><span class="cx">         foreach my $function (@{$interface-&gt;functions}) {
</span><span class="cx">             next if $function-&gt;{overloadIndex} &amp;&amp; $function-&gt;{overloadIndex} &gt; 1;
</span><del>-            next unless $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;ForwardDeclareInHeader&quot;} or $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CustomBinding&quot;};
</del><ins>+            next unless $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;ForwardDeclareInHeader&quot;};
</ins><span class="cx"> 
</span><span class="cx">             my $needsAppleCopyright = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;AppleCopyright&quot;};
</span><span class="cx">             if ($needsAppleCopyright) {
</span><span class="lines">@@ -1850,7 +1850,6 @@
</span><span class="cx">         foreach my $function (@functions) {
</span><span class="cx">             next if $function-&gt;{overloadIndex} &amp;&amp; $function-&gt;{overloadIndex} &gt; 1;
</span><span class="cx">             next if $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;ForwardDeclareInHeader&quot;};
</span><del>-            next if $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CustomBinding&quot;};
</del><span class="cx">             next if IsJSBuiltin($interface, $function);
</span><span class="cx"> 
</span><span class="cx">             my $needsAppleCopyright = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;AppleCopyright&quot;};
</span><span class="lines">@@ -2796,7 +2795,7 @@
</span><span class="cx"> 
</span><span class="cx">                 if ($attribute-&gt;signature-&gt;type eq &quot;double&quot; or $attribute-&gt;signature-&gt;type eq &quot;float&quot;) {
</span><span class="cx">                     push(@implContent, &quot;    if (!std::isfinite(nativeValue)) {\n&quot;);
</span><del>-                    push(@implContent, &quot;        setDOMException(state, TypeError);\n&quot;);
</del><ins>+                    push(@implContent, &quot;        throwVMTypeError(state);\n&quot;);
</ins><span class="cx">                     push(@implContent, &quot;        return false;\n&quot;);
</span><span class="cx">                     push(@implContent, &quot;    }\n&quot;);
</span><span class="cx">                 }
</span><span class="lines">@@ -2899,7 +2898,6 @@
</span><span class="cx">     if ($numFunctions &gt; 0) {
</span><span class="cx">         my $inAppleCopyright = 0;
</span><span class="cx">         foreach my $function (@{$interface-&gt;functions}) {
</span><del>-            next if $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CustomBinding&quot;};
</del><span class="cx">             next if IsJSBuiltin($interface, $function);
</span><span class="cx">             my $needsAppleCopyright = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;AppleCopyright&quot;};
</span><span class="cx">             if ($needsAppleCopyright) {
</span><span class="lines">@@ -3425,12 +3423,13 @@
</span><span class="cx">     $implIncludes{&quot;JSDOMBinding.h&quot;} = 1;
</span><span class="cx">     foreach my $parameter (@{$function-&gt;parameters}) {
</span><span class="cx">         my $argType = $parameter-&gt;type;
</span><ins>+
</ins><span class="cx">         # Optional arguments with [Optional] should generate an early call with fewer arguments.
</span><span class="cx">         # Optional arguments with [Optional=...] should not generate the early call.
</span><span class="cx">         # Optional Dictionary arguments always considered to have default of empty dictionary.
</span><span class="cx">         my $optional = $parameter-&gt;isOptional;
</span><span class="cx">         my $defaultAttribute = $parameter-&gt;extendedAttributes-&gt;{&quot;Default&quot;};
</span><del>-        if ($optional &amp;&amp; !$defaultAttribute &amp;&amp; $argType ne &quot;Dictionary&quot; &amp;&amp; !$codeGenerator-&gt;IsCallbackInterface($parameter-&gt;type)) {
</del><ins>+        if ($optional &amp;&amp; !$defaultAttribute &amp;&amp; $argType ne &quot;Dictionary&quot; &amp;&amp; !$codeGenerator-&gt;IsCallbackInterface($argType)) {
</ins><span class="cx">             # Generate early call if there are enough parameters.
</span><span class="cx">             if (!$hasOptionalArguments) {
</span><span class="cx">                 push(@$outputArray, &quot;\n    size_t argsCount = state-&gt;argumentCount();\n&quot;);
</span><span class="lines">@@ -3446,6 +3445,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         my $name = $parameter-&gt;name;
</span><ins>+        my $value = $name;
</ins><span class="cx"> 
</span><span class="cx">         if ($argType eq &quot;XPathNSResolver&quot;) {
</span><span class="cx">             push(@$outputArray, &quot;    RefPtr&lt;XPathNSResolver&gt; customResolver;\n&quot;);
</span><span class="lines">@@ -3456,13 +3456,13 @@
</span><span class="cx">             push(@$outputArray, &quot;            return JSValue::encode(jsUndefined());\n&quot;);
</span><span class="cx">             push(@$outputArray, &quot;        resolver = customResolver.get();\n&quot;);
</span><span class="cx">             push(@$outputArray, &quot;    }\n&quot;);
</span><del>-        } elsif ($codeGenerator-&gt;IsCallbackInterface($parameter-&gt;type)) {
</del><ins>+        } elsif ($codeGenerator-&gt;IsCallbackInterface($argType)) {
</ins><span class="cx">             my $callbackClassName = GetCallbackClassName($argType);
</span><span class="cx">             $implIncludes{&quot;$callbackClassName.h&quot;} = 1;
</span><span class="cx">             if ($optional) {
</span><span class="cx">                 push(@$outputArray, &quot;    RefPtr&lt;$argType&gt; $name;\n&quot;);
</span><span class="cx">                 push(@$outputArray, &quot;    if (!state-&gt;argument($argsIndex).isUndefinedOrNull()) {\n&quot;);
</span><del>-                if ($codeGenerator-&gt;IsFunctionOnlyCallbackInterface($parameter-&gt;type)) {
</del><ins>+                if ($codeGenerator-&gt;IsFunctionOnlyCallbackInterface($argType)) {
</ins><span class="cx">                     push(@$outputArray, &quot;        if (!state-&gt;uncheckedArgument($argsIndex).isFunction())\n&quot;);
</span><span class="cx">                 } else {
</span><span class="cx">                     push(@$outputArray, &quot;        if (!state-&gt;uncheckedArgument($argsIndex).isObject())\n&quot;);
</span><span class="lines">@@ -3476,7 +3476,7 @@
</span><span class="cx">                 }
</span><span class="cx">                 push(@$outputArray, &quot;    }\n&quot;);
</span><span class="cx">             } else {
</span><del>-                if ($codeGenerator-&gt;IsFunctionOnlyCallbackInterface($parameter-&gt;type)) {
</del><ins>+                if ($codeGenerator-&gt;IsFunctionOnlyCallbackInterface($argType)) {
</ins><span class="cx">                     push(@$outputArray, &quot;    if (!state-&gt;argument($argsIndex).isFunction())\n&quot;);
</span><span class="cx">                 } else {
</span><span class="cx">                     push(@$outputArray, &quot;    if (!state-&gt;argument($argsIndex).isObject())\n&quot;);
</span><span class="lines">@@ -3489,6 +3489,7 @@
</span><span class="cx">                     push(@$outputArray, &quot;    RefPtr&lt;$argType&gt; $name = ${callbackClassName}::create(asObject(state-&gt;uncheckedArgument($argsIndex)), castedThis-&gt;globalObject());\n&quot;);
</span><span class="cx">                 }
</span><span class="cx">             }
</span><ins>+            $value = &quot;WTFMove($name)&quot;;
</ins><span class="cx">         } elsif ($parameter-&gt;extendedAttributes-&gt;{&quot;Clamp&quot;}) {
</span><span class="cx">             my $nativeValue = &quot;${name}NativeValue&quot;;
</span><span class="cx">             push(@$outputArray, &quot;    $argType $name = 0;\n&quot;);
</span><span class="lines">@@ -3518,7 +3519,6 @@
</span><span class="cx">                 push(@$outputArray, &quot;    if (UNLIKELY(state-&gt;hadException()))\n&quot;);
</span><span class="cx">                 push(@$outputArray, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
</span><span class="cx">             }
</span><del>-
</del><span class="cx">         } elsif ($codeGenerator-&gt;IsEnumType($argType)) {
</span><span class="cx">             $implIncludes{&quot;&lt;runtime/Error.h&gt;&quot;} = 1;
</span><span class="cx"> 
</span><span class="lines">@@ -3603,30 +3603,22 @@
</span><span class="cx">             push(@$outputArray, &quot;    if (UNLIKELY(state-&gt;hadException()))\n&quot;);
</span><span class="cx">             push(@$outputArray, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
</span><span class="cx"> 
</span><del>-            if (IsPointerParameterPassedByReference($parameter, $interface) or ($codeGenerator-&gt;IsSVGTypeNeedingTearOff($argType) and not $interfaceName =~ /List$/)) {
-                push(@$outputArray, &quot;    if (!$name) {\n&quot;);
-                push(@$outputArray, &quot;        setDOMException(state, TYPE_MISMATCH_ERR);\n&quot;);
-                push(@$outputArray, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
-                push(@$outputArray, &quot;    }\n&quot;);
</del><ins>+            my $isTearOff = $codeGenerator-&gt;IsSVGTypeNeedingTearOff($argType) &amp;&amp; $interfaceName !~ /List$/;
+            if ($isTearOff or ShouldPassWrapperByReference($parameter, $interface)) {
+                push(@$outputArray, &quot;    if (!$name)\n&quot;);
+                push(@$outputArray, &quot;        return throwVMTypeError(state);\n&quot;);
+                $value = $isTearOff ? &quot;$name-&gt;propertyReference()&quot; : &quot;*$name&quot;;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            if ($parameter-&gt;type eq &quot;double&quot; or $parameter-&gt;type eq &quot;float&quot;) {
-                push(@$outputArray, &quot;    if (!std::isfinite($name)) {\n&quot;);
-                push(@$outputArray, &quot;        setDOMException(state, TypeError);\n&quot;);
-                push(@$outputArray, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
-                push(@$outputArray, &quot;    }\n&quot;);
</del><ins>+            if ($argType eq &quot;double&quot; or $argType eq &quot;float&quot;) {
+                push(@$outputArray, &quot;    if (!std::isfinite($name))\n&quot;);
+                push(@$outputArray, &quot;        return throwVMTypeError(state);\n&quot;);
</ins><span class="cx">             }
</span><del>-        }
</del><span class="cx"> 
</span><del>-        if ($argType eq &quot;NodeFilter&quot; || ($codeGenerator-&gt;IsTypedArrayType($argType) and not $argType eq &quot;ArrayBuffer&quot;)) {
-            push @arguments, &quot;$name.get()&quot;;
-        } elsif ($codeGenerator-&gt;IsSVGTypeNeedingTearOff($argType) and not $interfaceName =~ /List$/) {
-            push @arguments, &quot;$name-&gt;propertyReference()&quot;;
-        } elsif (IsPointerParameterPassedByReference($parameter, $interface)) {
-            push @arguments, &quot;*$name&quot;;
-        } else {
-            push @arguments, $name;
</del><ins>+            $value = &quot;$name.get()&quot; if $codeGenerator-&gt;IsTypedArrayType($argType) and $argType ne &quot;ArrayBuffer&quot;;
</ins><span class="cx">         }
</span><ins>+
+        push(@arguments, $value);
</ins><span class="cx">         $argsIndex++;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4111,26 +4103,17 @@
</span><span class="cx">     my $arrayOrSequenceType = $arrayType || $sequenceType;
</span><span class="cx"> 
</span><span class="cx">     return &quot;Vector&lt;&quot; . GetNativeVectorInnerType($arrayOrSequenceType) . &quot;&gt;&quot; if $arrayOrSequenceType;
</span><ins>+    return &quot;String&quot; if $codeGenerator-&gt;IsEnumType($type);
</ins><span class="cx"> 
</span><del>-    if ($codeGenerator-&gt;IsEnumType($type)) {
-        return &quot;String&quot;;
-    }
-
</del><span class="cx">     # For all other types, the native type is a pointer with same type name as the IDL type.
</span><span class="cx">     return &quot;${type}*&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub IsPointerParameterPassedByReference
</del><ins>+sub ShouldPassWrapperByReference
</ins><span class="cx"> {
</span><span class="cx">     my $parameter = shift;
</span><span class="cx">     my $interface = shift;
</span><del>-
-    return 0 if $parameter-&gt;isVariadic;
-    return 0 if $parameter-&gt;isNullable;
-    return 0 if $interface-&gt;extendedAttributes-&gt;{&quot;UsePointersEvenForNonNullableObjectArguments&quot;};
-    return 0 if $codeGenerator-&gt;IsCallbackInterface($parameter-&gt;type);
-    return 0 if $parameter-&gt;isOptional and $parameter-&gt;extendedAttributes-&gt;{&quot;Default&quot;} and $parameter-&gt;extendedAttributes-&gt;{&quot;Default&quot;} eq &quot;Undefined&quot;;
-    return substr(GetNativeType($parameter-&gt;type), -1) eq '*';
</del><ins>+    return $codeGenerator-&gt;ShouldPassWrapperByReference($parameter, $interface) &amp;&amp; substr(GetNativeType($parameter-&gt;type), -1) eq '*';
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GetNativeVectorInnerType
</span><span class="lines">@@ -5010,7 +4993,7 @@
</span><span class="cx">             my $index = 0;
</span><span class="cx">             foreach my $parameter (@{$function-&gt;parameters}) {
</span><span class="cx">                 last if $index eq $paramIndex;
</span><del>-                if (IsPointerParameterPassedByReference($parameter, $interface)) {
</del><ins>+                if (ShouldPassWrapperByReference($parameter, $interface)) {
</ins><span class="cx">                     push(@constructorArgList, &quot;*&quot; . $parameter-&gt;name);
</span><span class="cx">                 } else {
</span><span class="cx">                     push(@constructorArgList, $parameter-&gt;name);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorObjCpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -542,7 +542,6 @@
</span><span class="cx"> 
</span><span class="cx">     return 1 if $function-&gt;signature-&gt;type eq &quot;Promise&quot;;
</span><span class="cx">     return 1 if $function-&gt;signature-&gt;type eq &quot;Symbol&quot;;
</span><del>-    return 1 if $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CustomBinding&quot;};
</del><span class="cx"> 
</span><span class="cx">     foreach my $param (@{$function-&gt;parameters}) {
</span><span class="cx">         return 1 if $codeGenerator-&gt;GetSequenceType($param-&gt;type);
</span><span class="lines">@@ -1461,6 +1460,8 @@
</span><span class="cx"> 
</span><span class="cx">             my $parameterIndex = 0;
</span><span class="cx">             my $functionSig = &quot;- ($returnType)$functionName&quot;;
</span><ins>+            my @functionContent = ();
+
</ins><span class="cx">             foreach my $param (@{$function-&gt;parameters}) {
</span><span class="cx">                 my $paramName = $param-&gt;name;
</span><span class="cx">                 my $paramType = GetObjCType($param-&gt;type);
</span><span class="lines">@@ -1478,6 +1479,12 @@
</span><span class="cx">                     $implGetter = GetObjCTypeGetter($paramName, $idlType);
</span><span class="cx">                 }
</span><span class="cx"> 
</span><ins>+                if ($codeGenerator-&gt;ShouldPassWrapperByReference($param, $interface)) {
+                    $implGetter = &quot;*$implGetter&quot;;
+                    push(@functionContent, &quot;    if (!$paramName)\n&quot;);
+                    push(@functionContent, &quot;        WebCore::raiseTypeErrorException();\n&quot;);
+                }
+
</ins><span class="cx">                 push(@parameterNames, $implGetter);
</span><span class="cx">                 $needsCustom{&quot;XPathNSResolver&quot;} = $paramName if $idlType eq &quot;XPathNSResolver&quot;;
</span><span class="cx">                 $needsCustom{&quot;NodeFilter&quot;} = $paramName if $idlType eq &quot;NodeFilter&quot;;
</span><span class="lines">@@ -1498,7 +1505,6 @@
</span><span class="cx">                 $parameterIndex++;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            my @functionContent = ();
</del><span class="cx">             my $caller = &quot;IMPL&quot;;
</span><span class="cx"> 
</span><span class="cx">             # special case the XPathNSResolver
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsIDLAttributestxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -19,8 +19,8 @@
</span><span class="cx"> #
</span><span class="cx"> 
</span><span class="cx"> ActiveDOMObject
</span><ins>+AppleCopyright
</ins><span class="cx"> AtomicString
</span><del>-CPPPureInterface
</del><span class="cx"> CachedAttribute
</span><span class="cx"> CallbackNeedsOperatorEqual
</span><span class="cx"> Callback=FunctionOnly
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> ConstructorRaisesException
</span><span class="cx"> ConstructorTemplate=Event|TypedArray
</span><span class="cx"> Custom
</span><del>-CustomBinding
</del><span class="cx"> CustomCall
</span><span class="cx"> CustomConstructor
</span><span class="cx"> CustomDeleteProperty
</span><span class="lines">@@ -51,7 +50,6 @@
</span><span class="cx"> CustomReturn
</span><span class="cx"> CustomSetter
</span><span class="cx"> CustomToJSObject
</span><del>-UsePointersEvenForNonNullableObjectArguments
</del><span class="cx"> Default=NullString|Undefined
</span><span class="cx"> Deletable
</span><span class="cx"> DoNotCheckConstants
</span><span class="lines">@@ -127,7 +125,5 @@
</span><span class="cx"> TypedArray=*
</span><span class="cx"> URL
</span><span class="cx"> Unforgeable
</span><ins>+UsePointersEvenForNonNullableObjectArguments
</ins><span class="cx"> WindowEventHandler
</span><del>-
-# PLATFORM(IOS)
-AppleCopyright
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -206,10 +206,8 @@
</span><span class="cx">     Node* nextChild = JSNode::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!nextChild) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!nextChild)
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.excitingFunction(*nextChild);
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -801,10 +801,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(1));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), WTF::getPtr(impl.implementsMethod2(*context, strArg, *objArg, ec)));
</span><span class="cx"> 
</span><span class="cx">     setDOMException(state, ec);
</span><span class="lines">@@ -871,10 +869,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(1));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), WTF::getPtr(WebCore::TestSupplemental::supplementalMethod2(impl, *context, strArg, *objArg, ec)));
</span><span class="cx"> 
</span><span class="cx">     setDOMException(state, ec);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx">     if (!state-&gt;argument(0).isFunction())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 0, &quot;listener&quot;, &quot;TestMediaQueryListListener&quot;, &quot;method&quot;);
</span><span class="cx">     RefPtr&lt;MediaQueryListListener&gt; listener = JSMediaQueryListListener::create(asObject(state-&gt;uncheckedArgument(0)), castedThis-&gt;globalObject());
</span><del>-    impl.method(listener);
</del><ins>+    impl.method(WTFMove(listener));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -508,7 +508,7 @@
</span><span class="cx">     if (!state-&gt;argument(1).isFunction())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 1, &quot;testCallbackFunction&quot;, &quot;TestObj&quot;, nullptr);
</span><span class="cx">     RefPtr&lt;TestCallbackFunction&gt; testCallbackFunction = JSTestCallbackFunction::create(asObject(state-&gt;uncheckedArgument(1)), castedThis-&gt;globalObject());
</span><del>-    RefPtr&lt;TestObj&gt; object = TestObj::create(testCallback, testCallbackFunction);
</del><ins>+    RefPtr&lt;TestObj&gt; object = TestObj::create(*testCallback, *testCallbackFunction);
</ins><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -661,8 +661,6 @@
</span><span class="cx">     { &quot;methodWithExceptionWithMessage&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionMethodWithExceptionWithMessage), (intptr_t) (0) } },
</span><span class="cx">     { &quot;customMethod&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionCustomMethod), (intptr_t) (0) } },
</span><span class="cx">     { &quot;customMethodWithArgs&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionCustomMethodWithArgs), (intptr_t) (3) } },
</span><del>-    { &quot;customBindingMethod&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionCustomBindingMethod), (intptr_t) (0) } },
-    { &quot;customBindingMethodWithArgs&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionCustomBindingMethodWithArgs), (intptr_t) (3) } },
</del><span class="cx"> #if ENABLE(Condition3)
</span><span class="cx">     { &quot;jsBuiltinMethod&quot;, JSC::Builtin, NoIntrinsic, { (intptr_t)static_cast&lt;BuiltinGenerator&gt;(testObjJsBuiltinMethodCodeGenerator), (intptr_t) (0) } },
</span><span class="cx"> #else
</span><span class="lines">@@ -3316,10 +3314,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(2));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.voidMethodWithArgs(longArg, strArg, *objArg);
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="lines">@@ -3355,10 +3351,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(2));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = jsNumber(impl.byteMethodWithArgs(byteArg, strArg, *objArg));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="lines">@@ -3394,10 +3388,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(2));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = jsNumber(impl.octetMethodWithArgs(octetArg, strArg, *objArg));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="lines">@@ -3433,10 +3425,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(2));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = jsNumber(impl.longMethodWithArgs(longArg, strArg, *objArg));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="lines">@@ -3472,10 +3462,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(2));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), WTF::getPtr(impl.objMethodWithArgs(longArg, strArg, *objArg)));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="lines">@@ -3645,10 +3633,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(1));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), WTF::getPtr(impl.methodThatRequiresAllArgsAndThrows(strArg, *objArg, ec)));
</span><span class="cx"> 
</span><span class="cx">     setDOMException(state, ec);
</span><span class="lines">@@ -4134,7 +4120,7 @@
</span><span class="cx">     if (!state-&gt;argument(0).isObject())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;methodWithCallbackArg&quot;);
</span><span class="cx">     RefPtr&lt;TestCallback&gt; callback = JSTestCallback::create(asObject(state-&gt;uncheckedArgument(0)), castedThis-&gt;globalObject());
</span><del>-    impl.methodWithCallbackArg(callback);
</del><ins>+    impl.methodWithCallbackArg(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4154,7 +4140,7 @@
</span><span class="cx">     if (!state-&gt;argument(1).isObject())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 1, &quot;callback&quot;, &quot;TestObj&quot;, &quot;methodWithNonCallbackArgAndCallbackArg&quot;);
</span><span class="cx">     RefPtr&lt;TestCallback&gt; callback = JSTestCallback::create(asObject(state-&gt;uncheckedArgument(1)), castedThis-&gt;globalObject());
</span><del>-    impl.methodWithNonCallbackArgAndCallbackArg(nonCallback, callback);
</del><ins>+    impl.methodWithNonCallbackArgAndCallbackArg(nonCallback, WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4172,7 +4158,7 @@
</span><span class="cx">             return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;methodWithCallbackAndOptionalArg&quot;);
</span><span class="cx">         callback = JSTestCallback::create(asObject(state-&gt;uncheckedArgument(0)), castedThis-&gt;globalObject());
</span><span class="cx">     }
</span><del>-    impl.methodWithCallbackAndOptionalArg(callback);
</del><ins>+    impl.methodWithCallbackAndOptionalArg(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4189,7 +4175,7 @@
</span><span class="cx">     if (!state-&gt;argument(0).isFunction())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;methodWithCallbackFunctionArg&quot;);
</span><span class="cx">     RefPtr&lt;TestCallbackFunction&gt; callback = JSTestCallbackFunction::create(asObject(state-&gt;uncheckedArgument(0)), castedThis-&gt;globalObject());
</span><del>-    impl.methodWithCallbackFunctionArg(callback);
</del><ins>+    impl.methodWithCallbackFunctionArg(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4209,7 +4195,7 @@
</span><span class="cx">     if (!state-&gt;argument(1).isFunction())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 1, &quot;callback&quot;, &quot;TestObj&quot;, &quot;methodWithNonCallbackArgAndCallbackFunctionArg&quot;);
</span><span class="cx">     RefPtr&lt;TestCallbackFunction&gt; callback = JSTestCallbackFunction::create(asObject(state-&gt;uncheckedArgument(1)), castedThis-&gt;globalObject());
</span><del>-    impl.methodWithNonCallbackArgAndCallbackFunctionArg(nonCallback, callback);
</del><ins>+    impl.methodWithNonCallbackArgAndCallbackFunctionArg(nonCallback, WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4227,7 +4213,7 @@
</span><span class="cx">             return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;methodWithCallbackFunctionAndOptionalArg&quot;);
</span><span class="cx">         callback = JSTestCallbackFunction::create(asObject(state-&gt;uncheckedArgument(0)), castedThis-&gt;globalObject());
</span><span class="cx">     }
</span><del>-    impl.methodWithCallbackFunctionAndOptionalArg(callback);
</del><ins>+    impl.methodWithCallbackFunctionAndOptionalArg(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4239,7 +4225,7 @@
</span><span class="cx">             return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;staticMethodWithCallbackAndOptionalArg&quot;);
</span><span class="cx">         callback = createFunctionOnlyCallback&lt;JSTestCallback&gt;(state, jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject()), state-&gt;uncheckedArgument(0));
</span><span class="cx">     }
</span><del>-    TestObj::staticMethodWithCallbackAndOptionalArg(callback);
</del><ins>+    TestObj::staticMethodWithCallbackAndOptionalArg(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4250,7 +4236,7 @@
</span><span class="cx">     if (!state-&gt;argument(0).isObject())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;staticMethodWithCallbackArg&quot;);
</span><span class="cx">     RefPtr&lt;TestCallback&gt; callback = createFunctionOnlyCallback&lt;JSTestCallback&gt;(state, jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject()), state-&gt;uncheckedArgument(0));
</span><del>-    TestObj::staticMethodWithCallbackArg(callback);
</del><ins>+    TestObj::staticMethodWithCallbackArg(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4393,7 +4379,7 @@
</span><span class="cx">     if (!state-&gt;argument(0).isObject())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 0, &quot;callback&quot;, &quot;TestObj&quot;, &quot;overloadedMethod&quot;);
</span><span class="cx">     RefPtr&lt;TestCallback&gt; callback = JSTestCallback::create(asObject(state-&gt;uncheckedArgument(0)), castedThis-&gt;globalObject());
</span><del>-    impl.overloadedMethod(callback);
</del><ins>+    impl.overloadedMethod(WTFMove(callback));
</ins><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4444,10 +4430,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.overloadedMethod(*objArg);
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="lines">@@ -4856,10 +4840,8 @@
</span><span class="cx">     TestNode* value = JSTestNode::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!value) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!value)
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.convert1(*value);
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="lines">@@ -4993,10 +4975,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     Vector&lt;unsigned&gt; a = toNativeArray&lt;unsigned&gt;(state, state-&gt;argument(1));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="lines">@@ -5022,10 +5002,8 @@
</span><span class="cx">     TestObj* objArg = JSTestObj::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!objArg) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!objArg)
+        return throwVMTypeError(state);
</ins><span class="cx">     Vector&lt;int&gt; array = toNativeArray&lt;int&gt;(state, state-&gt;argument(1));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="lines">@@ -5088,10 +5066,8 @@
</span><span class="cx">     Node* head = JSNode::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!head) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!head)
+        return throwVMTypeError(state);
</ins><span class="cx">     Vector&lt;Node*&gt; tail;
</span><span class="cx">     for (unsigned i = 1, count = state-&gt;argumentCount(); i &lt; count; ++i) {
</span><span class="cx">         if (!state-&gt;uncheckedArgument(i).inherits(JSNode::info()))
</span><span class="lines">@@ -5159,10 +5135,8 @@
</span><span class="cx">     float a = state-&gt;argument(0).toFloat(state);
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!std::isfinite(a)) {
-        setDOMException(state, TypeError);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!std::isfinite(a))
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.testPromiseFunctionWithFloatArgument(a, DeferredWrapper(state, castedThis-&gt;globalObject(), promiseDeferred));
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="lines">@@ -5234,10 +5208,8 @@
</span><span class="cx">     float a = state-&gt;argument(0).toFloat(state);
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!std::isfinite(a)) {
-        setDOMException(state, TypeError);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!std::isfinite(a))
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.testPromiseOverloadedFunction(a, DeferredWrapper(state, castedThis-&gt;globalObject(), promiseDeferred));
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="lines">@@ -5261,10 +5233,8 @@
</span><span class="cx">     FetchRequest* request = JSFetchRequest::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!request) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!request)
+        return throwVMTypeError(state);
</ins><span class="cx">     impl.testPromiseOverloadedFunction(*request, DeferredWrapper(state, castedThis-&gt;globalObject(), promiseDeferred));
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -102,12 +102,7 @@
</span><span class="cx"> inline JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, TestObj&amp; impl) { return toJS(state, globalObject, &amp;impl); }
</span><span class="cx"> JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, TestObj*);
</span><span class="cx"> 
</span><del>-// Functions
</del><span class="cx"> 
</span><del>-JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomBindingMethod(JSC::ExecState*);
-JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomBindingMethodWithArgs(JSC::ExecState*);
-
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -73,10 +73,8 @@
</span><span class="cx">     ArrayBuffer* arrayBuffer = toArrayBuffer(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!arrayBuffer) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!arrayBuffer)
+        return throwVMTypeError(state);
</ins><span class="cx">     RefPtr&lt;TestOverloadedConstructors&gt; object = TestOverloadedConstructors::create(*arrayBuffer);
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="lines">@@ -101,10 +99,8 @@
</span><span class="cx">     Blob* blob = JSBlob::toWrapped(state-&gt;argument(0));
</span><span class="cx">     if (UNLIKELY(state-&gt;hadException()))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><del>-    if (!blob) {
-        setDOMException(state, TYPE_MISMATCH_ERR);
-        return JSValue::encode(jsUndefined());
-    }
</del><ins>+    if (!blob)
+        return throwVMTypeError(state);
</ins><span class="cx">     RefPtr&lt;TestOverloadedConstructors&gt; object = TestOverloadedConstructors::create(*blob);
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx">     if (!state-&gt;argument(1).isObject())
</span><span class="cx">         return throwArgumentMustBeFunctionError(*state, 1, &quot;testCallback&quot;, &quot;TestTypedefs&quot;, nullptr);
</span><span class="cx">     RefPtr&lt;TestCallback&gt; testCallback = JSTestCallback::create(asObject(state-&gt;uncheckedArgument(1)), castedThis-&gt;globalObject());
</span><del>-    RefPtr&lt;TestTypedefs&gt; object = TestTypedefs::create(hello, testCallback);
</del><ins>+    RefPtr&lt;TestTypedefs&gt; object = TestTypedefs::create(hello, *testCallback);
</ins><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestActiveDOMObjectmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -64,7 +64,9 @@
</span><span class="cx"> - (void)excitingFunction:(DOMNode *)nextChild
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;excitingFunction(core(nextChild));
</del><ins>+    if (!nextChild)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;excitingFunction(*core(nextChild));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)postMessage:(NSString *)message
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestCallbackmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallback.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallback.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallback.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -76,7 +76,9 @@
</span><span class="cx"> - (BOOL)callbackWithArrayParam:(DOMFloat32Array *)arrayParam
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;callbackWithArrayParam(core(arrayParam));
</del><ins>+    if (!arrayParam)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;callbackWithArrayParam(*core(arrayParam));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)callbackWithSerializedScriptValueParam:(NSString *)srzParam strArg:(NSString *)strArg
</span><span class="lines">@@ -94,13 +96,19 @@
</span><span class="cx"> - (int)customCallback:(DOMClass5 *)class5Param class6Param:(DOMClass6 *)class6Param
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;customCallback(core(class5Param), core(class6Param));
</del><ins>+    if (!class5Param)
+        WebCore::raiseTypeErrorException();
+    if (!class6Param)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;customCallback(*core(class5Param), *core(class6Param));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)callbackWithStringList:(DOMDOMStringList *)listParam
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;callbackWithStringList(core(listParam));
</del><ins>+    if (!listParam)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;callbackWithStringList(*core(listParam));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)callbackWithBoolean:(BOOL)boolParam
</span><span class="lines">@@ -112,7 +120,9 @@
</span><span class="cx"> - (BOOL)callbackRequiresThisToPass:(int)longParam testNodeParam:(DOMTestNode *)testNodeParam
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;callbackRequiresThisToPass(longParam, core(testNodeParam));
</del><ins>+    if (!testNodeParam)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;callbackRequiresThisToPass(longParam, *core(testNodeParam));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestCallbackFunctionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -76,7 +76,9 @@
</span><span class="cx"> - (BOOL)callbackWithArrayParam:(DOMFloat32Array *)arrayParam
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;callbackWithArrayParam(core(arrayParam));
</del><ins>+    if (!arrayParam)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;callbackWithArrayParam(*core(arrayParam));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)callbackWithSerializedScriptValueParam:(NSString *)srzParam strArg:(NSString *)strArg
</span><span class="lines">@@ -94,13 +96,19 @@
</span><span class="cx"> - (int)customCallback:(DOMClass5 *)class5Param class6Param:(DOMClass6 *)class6Param
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;customCallback(core(class5Param), core(class6Param));
</del><ins>+    if (!class5Param)
+        WebCore::raiseTypeErrorException();
+    if (!class6Param)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;customCallback(*core(class5Param), *core(class6Param));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)callbackWithStringList:(DOMDOMStringList *)listParam
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;callbackWithStringList(core(listParam));
</del><ins>+    if (!listParam)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;callbackWithStringList(*core(listParam));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)callbackWithBoolean:(BOOL)boolParam
</span><span class="lines">@@ -112,7 +120,9 @@
</span><span class="cx"> - (BOOL)callbackRequiresThisToPass:(int)longParam testNodeParam:(DOMTestNode *)testNodeParam
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;callbackRequiresThisToPass(longParam, core(testNodeParam));
</del><ins>+    if (!testNodeParam)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;callbackRequiresThisToPass(longParam, *core(testNodeParam));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestInterfacemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestInterface.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestInterface.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestInterface.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -194,8 +194,10 @@
</span><span class="cx"> - (DOMTestObj *)implementsMethod2:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
</ins><span class="cx">     WebCore::ExceptionCode ec = 0;
</span><del>-    DOMTestObj *result = kit(WTF::getPtr(IMPL-&gt;implementsMethod2(strArg, core(objArg), ec)));
</del><ins>+    DOMTestObj *result = kit(WTF::getPtr(IMPL-&gt;implementsMethod2(strArg, *core(objArg), ec)));
</ins><span class="cx">     WebCore::raiseOnDOMError(ec);
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -237,8 +239,10 @@
</span><span class="cx"> - (DOMTestObj *)supplementalMethod2:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
</ins><span class="cx">     WebCore::ExceptionCode ec = 0;
</span><del>-    DOMTestObj *result = kit(WTF::getPtr(WebCore::TestSupplemental::supplementalMethod2(*IMPL, strArg, core(objArg), ec)));
</del><ins>+    DOMTestObj *result = kit(WTF::getPtr(WebCore::TestSupplemental::supplementalMethod2(*IMPL, strArg, *core(objArg), ec)));
</ins><span class="cx">     WebCore::raiseOnDOMError(ec);
</span><span class="cx">     return result;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestMediaQueryListListenermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -58,7 +58,9 @@
</span><span class="cx"> - (void)method:(DOMMediaQueryListListener *)listener
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;method(core(listener));
</del><ins>+    if (!listener)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;method(*core(listener));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestObjmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -970,7 +970,9 @@
</span><span class="cx"> - (void)voidMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;voidMethodWithArgs(longArg, strArg, core(objArg));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;voidMethodWithArgs(longArg, strArg, *core(objArg));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (char)byteMethod
</span><span class="lines">@@ -982,7 +984,9 @@
</span><span class="cx"> - (char)byteMethodWithArgs:(char)byteArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;byteMethodWithArgs(byteArg, strArg, core(objArg));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;byteMethodWithArgs(byteArg, strArg, *core(objArg));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (unsigned char)octetMethod
</span><span class="lines">@@ -994,7 +998,9 @@
</span><span class="cx"> - (unsigned char)octetMethodWithArgs:(unsigned char)octetArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;octetMethodWithArgs(octetArg, strArg, core(objArg));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;octetMethodWithArgs(octetArg, strArg, *core(objArg));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (int)longMethod
</span><span class="lines">@@ -1006,7 +1012,9 @@
</span><span class="cx"> - (int)longMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return IMPL-&gt;longMethodWithArgs(longArg, strArg, core(objArg));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    return IMPL-&gt;longMethodWithArgs(longArg, strArg, *core(objArg));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (DOMTestObj *)objMethod
</span><span class="lines">@@ -1018,7 +1026,9 @@
</span><span class="cx"> - (DOMTestObj *)objMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    return kit(WTF::getPtr(IMPL-&gt;objMethodWithArgs(longArg, strArg, core(objArg))));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    return kit(WTF::getPtr(IMPL-&gt;objMethodWithArgs(longArg, strArg, *core(objArg))));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (int)unforgeableMethod
</span><span class="lines">@@ -1066,8 +1076,10 @@
</span><span class="cx"> - (DOMTestObj *)methodThatRequiresAllArgsAndThrows:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
</ins><span class="cx">     WebCore::ExceptionCode ec = 0;
</span><del>-    DOMTestObj *result = kit(WTF::getPtr(IMPL-&gt;methodThatRequiresAllArgsAndThrows(strArg, core(objArg), ec)));
</del><ins>+    DOMTestObj *result = kit(WTF::getPtr(IMPL-&gt;methodThatRequiresAllArgsAndThrows(strArg, *core(objArg), ec)));
</ins><span class="cx">     WebCore::raiseOnDOMError(ec);
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -1107,7 +1119,9 @@
</span><span class="cx"> - (void)customMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;customMethodWithArgs(longArg, strArg, core(objArg));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;customMethodWithArgs(longArg, strArg, *core(objArg));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -1125,7 +1139,9 @@
</span><span class="cx"> - (void)jsBuiltinMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;jsBuiltinMethodWithArgs(longArg, strArg, core(objArg));
</del><ins>+    if (!objArg)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;jsBuiltinMethodWithArgs(longArg, strArg, *core(objArg));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="lines">@@ -1133,15 +1149,19 @@
</span><span class="cx"> - (void)addEventListener:(NSString *)type listener:(id &lt;DOMEventListener&gt;)listener useCapture:(BOOL)useCapture
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><ins>+    if (!listener)
+        WebCore::raiseTypeErrorException();
</ins><span class="cx">     RefPtr&lt;WebCore::EventListener&gt; nativeEventListener = WebCore::ObjCEventListener::wrap(listener);
</span><del>-    IMPL-&gt;addEventListener(type, WTF::getPtr(nativeEventListener), useCapture);
</del><ins>+    IMPL-&gt;addEventListener(type, *WTF::getPtr(nativeEventListener), useCapture);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)removeEventListener:(NSString *)type listener:(id &lt;DOMEventListener&gt;)listener useCapture:(BOOL)useCapture
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><ins>+    if (!listener)
+        WebCore::raiseTypeErrorException();
</ins><span class="cx">     RefPtr&lt;WebCore::EventListener&gt; nativeEventListener = WebCore::ObjCEventListener::wrap(listener);
</span><del>-    IMPL-&gt;removeEventListener(type, WTF::getPtr(nativeEventListener), useCapture);
</del><ins>+    IMPL-&gt;removeEventListener(type, *WTF::getPtr(nativeEventListener), useCapture);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)withScriptStateVoid
</span><span class="lines">@@ -1340,7 +1360,9 @@
</span><span class="cx"> - (void)convert1:(DOMTestNode *)value
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;convert1(core(value));
</del><ins>+    if (!value)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;convert1(*core(value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)convert2:(DOMTestNode *)value
</span><span class="lines">@@ -1403,7 +1425,9 @@
</span><span class="cx"> - (void)variadicNodeMethod:(DOMNode *)head tail:(DOMNode *)tail
</span><span class="cx"> {
</span><span class="cx">     WebCore::JSMainThreadNullState state;
</span><del>-    IMPL-&gt;variadicNodeMethod(core(head), core(tail));
</del><ins>+    if (!head)
+        WebCore::raiseTypeErrorException();
+    IMPL-&gt;variadicNodeMethod(*core(head), core(tail));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)any:(float)a b:(int)b
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestObjidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestObj.idl (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestObj.idl        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/bindings/scripts/test/TestObj.idl        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -137,10 +137,6 @@
</span><span class="cx">     [Custom] void customMethod();
</span><span class="cx">     [Custom] void customMethodWithArgs(long longArg, DOMString strArg, TestObj objArg);
</span><span class="cx"> 
</span><del>-    // 'CustomBinding' extended attribute
-    [CustomBinding] void customBindingMethod();
-    [CustomBinding] void customBindingMethodWithArgs(long longArg, DOMString strArg, TestObj objArg);
-
</del><span class="cx">     // 'JSBuiltin' extended attribute
</span><span class="cx">     [Conditional=Condition3, JSBuiltin] void jsBuiltinMethod();
</span><span class="cx">     [Conditional=Condition3, JSBuiltin] void jsBuiltinMethodWithArgs(long longArg, DOMString strArg, TestObj objArg);
</span></span></pre></div>
<a id="trunkSourceWebCoredomDOMImplementationidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DOMImplementation.idl (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DOMImplementation.idl        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/dom/DOMImplementation.idl        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -30,24 +30,22 @@
</span><span class="cx"> 
</span><span class="cx">     // DOM Level 2
</span><span class="cx"> 
</span><del>-    [ObjCLegacyUnnamedParameters, RaisesException, NewObject] DocumentType createDocumentType([Default=Undefined] optional DOMString? qualifiedName,
-        [Default=Undefined] optional DOMString? publicId, [Default=Undefined] optional DOMString? systemId);
</del><ins>+    [ObjCLegacyUnnamedParameters, RaisesException, NewObject] DocumentType createDocumentType([Default=Undefined] optional DOMString? qualifiedName, [Default=Undefined] optional DOMString? publicId, [Default=Undefined] optional DOMString? systemId);
</ins><span class="cx"> 
</span><ins>+    [NewObject, ObjCLegacyUnnamedParameters, RaisesException]
</ins><span class="cx"> #if defined(LANGUAGE_OBJECTIVE_C) &amp;&amp; LANGUAGE_OBJECTIVE_C || defined(LANGUAGE_GOBJECT) &amp;&amp; LANGUAGE_GOBJECT
</span><del>-    [ObjCLegacyUnnamedParameters, RaisesException] Document createDocument(optional DOMString namespaceURI, optional DOMString qualifiedName,
-        optional DocumentType doctype);
</del><ins>+        Document
</ins><span class="cx"> #else
</span><del>-    [RaisesException, NewObject] XMLDocument createDocument([Default=Undefined] optional DOMString? namespaceURI,
-        [TreatNullAs=EmptyString, Default=Undefined] optional DOMString qualifiedName, [Default=Undefined] optional DocumentType? doctype);
</del><ins>+        XMLDocument
</ins><span class="cx"> #endif
</span><ins>+        createDocument([Default=Undefined] optional DOMString? namespaceURI, [TreatNullAs=EmptyString, Default=Undefined] optional DOMString qualifiedName, [Default=Undefined] optional DocumentType? doctype);
</ins><span class="cx"> 
</span><span class="cx">     // DOMImplementationCSS interface from DOM Level 2 CSS
</span><span class="cx"> 
</span><del>-    [ObjCLegacyUnnamedParameters, RaisesException] CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title,
-                                                     [Default=Undefined] optional DOMString media);
</del><ins>+    [ObjCLegacyUnnamedParameters, RaisesException] CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title, [Default=Undefined] optional DOMString media);
</ins><span class="cx"> 
</span><span class="cx">     // HTMLDOMImplementation interface from DOM Level 2 HTML
</span><span class="cx"> 
</span><span class="cx">     [NewObject] HTMLDocument createHTMLDocument([Default=NullString] optional DOMString title);
</span><del>-};
</del><span class="cx"> 
</span><ins>+};
</ins></span></pre></div>
<a id="trunkSourceWebCoredomEventListeneridl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/EventListener.idl (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/EventListener.idl        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/dom/EventListener.idl        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -22,7 +22,6 @@
</span><span class="cx"> [
</span><span class="cx">     NoInterfaceObject,
</span><span class="cx">     ObjCProtocol,
</span><del>-    CPPPureInterface,
</del><span class="cx"> ] interface EventListener {
</span><span class="cx">     void handleEvent(Event event);
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoredomEventTargetidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/EventTarget.idl (199264 => 199265)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/EventTarget.idl        2016-04-09 03:07:43 UTC (rev 199264)
+++ trunk/Source/WebCore/dom/EventTarget.idl        2016-04-09 03:46:25 UTC (rev 199265)
</span><span class="lines">@@ -20,7 +20,6 @@
</span><span class="cx"> 
</span><span class="cx"> // Introduced in DOM Level 2:
</span><span class="cx"> [
</span><del>-    CPPPureInterface,
</del><span class="cx">     CustomToJSObject,
</span><span class="cx">     UsePointersEvenForNonNullableObjectArguments,
</span><span class="cx">     JSCustomToNativeObject,
</span></span></pre>
</div>
</div>

</body>
</html>