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

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

<h3>Log Message</h3>
<pre>Web Replay: CodeGeneratorJS should guard includes of replay-related headers
https://bugs.webkit.org/show_bug.cgi?id=131407

Reviewed by Timothy Hatcher.

This patch adds guards to headers that are only required by generated replay code
that is itself guarded. Other ports probably haven't added the headers to their
build files, so we don't want to emit the unused header includes.

This patch also converts generated uses of DEFINE_STATIC_LOCAL to NeverDestroyed&lt;T&gt;.
Finally, a new bindings test was added to document changes to generated replay code.

Test: Source/WebCore/bindings/scripts/test/TestNondeterministic.idl

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
(GenerateImplementationFunctionCall):

* bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp: Added.
* bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h: Added.
* bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols: Added.
* bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h: Added.
* bindings/scripts/test/JS/JSTestNondeterministic.cpp: Added.
* bindings/scripts/test/JS/JSTestNondeterministic.h: Added.
* bindings/scripts/test/ObjC/DOMTestNondeterministic.h: Added.
* bindings/scripts/test/ObjC/DOMTestNondeterministic.mm: Added.
* bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h: Added.
* bindings/scripts/test/TestNondeterministic.idl: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministich">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministicsymbols">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministicPrivateh">trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestNondeterministich">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestNondeterministicmm">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestObjCDOMTestNondeterministicInternalh">trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestNondeterministicidl">trunk/Source/WebCore/bindings/scripts/test/TestNondeterministic.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167139 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-11 19:04:44 UTC (rev 167139)
+++ trunk/Source/WebCore/ChangeLog        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2014-04-11  Brian J. Burg  &lt;burg@cs.washington.edu&gt;
+
+        Web Replay: CodeGeneratorJS should guard includes of replay-related headers
+        https://bugs.webkit.org/show_bug.cgi?id=131407
+
+        Reviewed by Timothy Hatcher.
+
+        This patch adds guards to headers that are only required by generated replay code
+        that is itself guarded. Other ports probably haven't added the headers to their
+        build files, so we don't want to emit the unused header includes.
+
+        This patch also converts generated uses of DEFINE_STATIC_LOCAL to NeverDestroyed&lt;T&gt;.
+        Finally, a new bindings test was added to document changes to generated replay code.
+
+        Test: Source/WebCore/bindings/scripts/test/TestNondeterministic.idl
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateImplementation):
+        (GenerateImplementationFunctionCall):
+
+        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp: Added.
+        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h: Added.
+        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols: Added.
+        * bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h: Added.
+        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: Added.
+        * bindings/scripts/test/JS/JSTestNondeterministic.h: Added.
+        * bindings/scripts/test/ObjC/DOMTestNondeterministic.h: Added.
+        * bindings/scripts/test/ObjC/DOMTestNondeterministic.mm: Added.
+        * bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h: Added.
+        * bindings/scripts/test/TestNondeterministic.idl: Added.
+
</ins><span class="cx"> 2014-04-11  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Pipe initial scale factor to TileController
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (167139 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-04-11 19:04:44 UTC (rev 167139)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -2196,19 +2196,21 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Nondeterministic&quot;}) {
</span><del>-                $implIncludes{&quot;&lt;replay/InputCursor.h&gt;&quot;} = 1;
</del><ins>+                AddToImplIncludes(&quot;MemoizedDOMResult.h&quot;, &quot;WEB_REPLAY&quot;);
+                AddToImplIncludes(&quot;&lt;replay/InputCursor.h&gt;&quot;, &quot;WEB_REPLAY&quot;);
+                AddToImplIncludes(&quot;&lt;wtf/NeverDestroyed.h&gt;&quot;, &quot;WEB_REPLAY&quot;);
+
</ins><span class="cx">                 push(@implContent, &quot;#if ENABLE(WEB_REPLAY)\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    InputCursor&amp; cursor = globalObject-&gt;inputCursor();\n&quot;);
</span><span class="cx"> 
</span><del>-                $implIncludes{&quot;MemoizedDOMResult.h&quot;} = 1;
</del><span class="cx">                 my $nativeType = GetNativeType($type);
</span><span class="cx">                 my $memoizedType = GetNativeTypeForMemoization($type);
</span><span class="cx">                 my $exceptionCode = $getterExceptions ? &quot;ec&quot; : &quot;0&quot;;
</span><del>-                push(@implContent, &quot;    DEPRECATED_DEFINE_STATIC_LOCAL(const AtomicString, bindingName, (\&quot;$interfaceName.$name\&quot;, AtomicString::ConstructFromLiteral));\n&quot;);
</del><ins>+                push(@implContent, &quot;    static NeverDestroyed&lt;const AtomicString&gt; bindingName(\&quot;$interfaceName.$name\&quot;, AtomicString::ConstructFromLiteral);\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;    if (cursor.isCapturing()) {\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;        $memoizedType memoizedResult = castedThis-&gt;impl().$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;);\n&quot;);
</span><del>-                push(@implContent, &quot;        cursor.appendInput&lt;MemoizedDOMResult&lt;$memoizedType&gt;&gt;(bindingName, memoizedResult, $exceptionCode);\n&quot;);
</del><ins>+                push(@implContent, &quot;        cursor.appendInput&lt;MemoizedDOMResult&lt;$memoizedType&gt;&gt;(bindingName.get().string(), memoizedResult, $exceptionCode);\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;        JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interfaceName, &quot;memoizedResult&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;        setDOMException(exec, ec);\n&quot;) if $getterExceptions;
</span><span class="cx">                 push(@implContent, &quot;        return JSValue::encode(result);\n&quot;);
</span><span class="lines">@@ -3555,7 +3557,7 @@
</span><span class="cx"> 
</span><span class="cx">     if ($function-&gt;signature-&gt;type eq &quot;void&quot;) {
</span><span class="cx">         if ($nondeterministic) {
</span><del>-            $implIncludes{&quot;&lt;replay/InputCursor.h&gt;&quot;} = 1;
</del><ins>+            AddToImplIncludes(&quot;&lt;replay/InputCursor.h&gt;&quot;, &quot;WEB_REPLAY&quot;);
</ins><span class="cx">             push(@implContent, &quot;#if ENABLE(WEB_REPLAY)\n&quot;);
</span><span class="cx">             push(@implContent, $indent . &quot;InputCursor&amp; cursor = exec-&gt;lexicalGlobalObject()-&gt;inputCursor();\n&quot;);
</span><span class="cx">             push(@implContent, $indent . &quot;if (!cursor.isReplaying()) {\n&quot;);
</span><span class="lines">@@ -3584,19 +3586,21 @@
</span><span class="cx">     } else {
</span><span class="cx">         my $thisObject = $function-&gt;isStatic ? 0 : &quot;castedThis&quot;;
</span><span class="cx">         if ($nondeterministic) {
</span><del>-            $implIncludes{&quot;MemoizedDOMResult.h&quot;} = 1;
-            $implIncludes{&quot;&lt;replay/InputCursor.h&gt;&quot;} = 1;
</del><ins>+            AddToImplIncludes(&quot;MemoizedDOMResult.h&quot;, &quot;WEB_REPLAY&quot;);
+            AddToImplIncludes(&quot;&lt;replay/InputCursor.h&gt;&quot;, &quot;WEB_REPLAY&quot;);
+            AddToImplIncludes(&quot;&lt;wtf/NeverDestroyed.h&gt;&quot;, &quot;WEB_REPLAY&quot;);
+
</ins><span class="cx">             my $nativeType = GetNativeTypeFromSignature($function-&gt;signature);
</span><span class="cx">             my $memoizedType = GetNativeTypeForMemoization($function-&gt;signature-&gt;type);
</span><span class="cx">             my $bindingName = $interfaceName . &quot;.&quot; . $function-&gt;signature-&gt;name;
</span><span class="cx">             push(@implContent, $indent . &quot;JSValue result;\n&quot;);
</span><span class="cx">             push(@implContent, &quot;#if ENABLE(WEB_REPLAY)\n&quot;);
</span><span class="cx">             push(@implContent, $indent . &quot;InputCursor&amp; cursor = exec-&gt;lexicalGlobalObject()-&gt;inputCursor();\n&quot;);
</span><del>-            push(@implContent, $indent . &quot;DEFINE_STATIC_LOCAL(const AtomicString, bindingName, (\&quot;$bindingName\&quot;, AtomicString::ConstructFromLiteral));\n&quot;);
</del><ins>+            push(@implContent, $indent . &quot;static NeverDestroyed&lt;const AtomicString&gt; bindingName(\&quot;$bindingName\&quot;, AtomicString::ConstructFromLiteral);\n&quot;);
</ins><span class="cx">             push(@implContent, $indent . &quot;if (cursor.isCapturing()) {\n&quot;);
</span><span class="cx">             push(@implContent, $indent . &quot;    $nativeType memoizedResult = $functionString;\n&quot;);
</span><span class="cx">             my $exceptionCode = $raisesException ? &quot;ec&quot; : &quot;0&quot;;
</span><del>-            push(@implContent, $indent . &quot;    cursor.appendInput&lt;MemoizedDOMResult&lt;$memoizedType&gt;&gt;(bindingName, memoizedResult, $exceptionCode);\n&quot;);
</del><ins>+            push(@implContent, $indent . &quot;    cursor.appendInput&lt;MemoizedDOMResult&lt;$memoizedType&gt;&gt;(bindingName.get().string(), memoizedResult, $exceptionCode);\n&quot;);
</ins><span class="cx">             push(@implContent, $indent . &quot;    result = &quot; . NativeToJSValue($function-&gt;signature, 1, $interfaceName, &quot;memoizedResult&quot;, $thisObject) . &quot;;\n&quot;);
</span><span class="cx">             push(@implContent, $indent . &quot;} else if (cursor.isReplaying()) {\n&quot;);
</span><span class="cx">             push(@implContent, $indent . &quot;    MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();\n&quot;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministiccpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.cpp        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,333 @@
</span><ins>+/*
+ *  This file is part of the WebKit open source project.
+ *  This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;WebKitDOMTestNondeterministic.h&quot;
+
+#include &quot;CSSImportRule.h&quot;
+#include &quot;DOMObjectCache.h&quot;
+#include &quot;Document.h&quot;
+#include &quot;ExceptionCode.h&quot;
+#include &quot;JSMainThreadExecState.h&quot;
+#include &quot;WebKitDOMPrivate.h&quot;
+#include &quot;WebKitDOMTestNondeterministicPrivate.h&quot;
+#include &quot;gobject/ConvertToUTF8String.h&quot;
+#include &lt;wtf/GetPtr.h&gt;
+#include &lt;wtf/RefPtr.h&gt;
+
+#define WEBKIT_DOM_TEST_NONDETERMINISTIC_GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE(obj, WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC, WebKitDOMTestNondeterministicPrivate)
+
+typedef struct _WebKitDOMTestNondeterministicPrivate {
+    RefPtr&lt;WebCore::TestNondeterministic&gt; coreObject;
+} WebKitDOMTestNondeterministicPrivate;
+
+namespace WebKit {
+
+WebKitDOMTestNondeterministic* kit(WebCore::TestNondeterministic* obj)
+{
+    if (!obj)
+        return 0;
+
+    if (gpointer ret = DOMObjectCache::get(obj))
+        return WEBKIT_DOM_TEST_NONDETERMINISTIC(ret);
+
+    return wrapTestNondeterministic(obj);
+}
+
+WebCore::TestNondeterministic* core(WebKitDOMTestNondeterministic* request)
+{
+    return request ? static_cast&lt;WebCore::TestNondeterministic*&gt;(WEBKIT_DOM_OBJECT(request)-&gt;coreObject) : 0;
+}
+
+WebKitDOMTestNondeterministic* wrapTestNondeterministic(WebCore::TestNondeterministic* coreObject)
+{
+    ASSERT(coreObject);
+    return WEBKIT_DOM_TEST_NONDETERMINISTIC(g_object_new(WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC, &quot;core-object&quot;, coreObject, NULL));
+}
+
+} // namespace WebKit
+
+G_DEFINE_TYPE(WebKitDOMTestNondeterministic, webkit_dom_test_nondeterministic, WEBKIT_TYPE_DOM_OBJECT)
+
+enum {
+    PROP_0,
+    PROP_NONDETERMINISTIC_READONLY_ATTR,
+    PROP_NONDETERMINISTIC_WRITEABLE_ATTR,
+    PROP_NONDETERMINISTIC_EXCEPTION_ATTR,
+    PROP_NONDETERMINISTIC_GETTER_EXCEPTION_ATTR,
+    PROP_NONDETERMINISTIC_SETTER_EXCEPTION_ATTR,
+};
+
+static void webkit_dom_test_nondeterministic_finalize(GObject* object)
+{
+    WebKitDOMTestNondeterministicPrivate* priv = WEBKIT_DOM_TEST_NONDETERMINISTIC_GET_PRIVATE(object);
+
+    WebKit::DOMObjectCache::forget(priv-&gt;coreObject.get());
+
+    priv-&gt;~WebKitDOMTestNondeterministicPrivate();
+    G_OBJECT_CLASS(webkit_dom_test_nondeterministic_parent_class)-&gt;finalize(object);
+}
+
+static void webkit_dom_test_nondeterministic_set_property(GObject* object, guint propertyId, const GValue* value, GParamSpec* pspec)
+{
+    WebCore::JSMainThreadNullState state;
+    WebKitDOMTestNondeterministic* self = WEBKIT_DOM_TEST_NONDETERMINISTIC(object);
+    WebCore::TestNondeterministic* coreSelf = WebKit::core(self);
+
+    switch (propertyId) {
+    case PROP_NONDETERMINISTIC_WRITEABLE_ATTR: {
+        coreSelf-&gt;setNondeterministicWriteableAttr(WTF::String::fromUTF8(g_value_get_string(value)));
+        break;
+    }
+    case PROP_NONDETERMINISTIC_EXCEPTION_ATTR: {
+        coreSelf-&gt;setNondeterministicExceptionAttr(WTF::String::fromUTF8(g_value_get_string(value)));
+        break;
+    }
+    case PROP_NONDETERMINISTIC_GETTER_EXCEPTION_ATTR: {
+        coreSelf-&gt;setNondeterministicGetterExceptionAttr(WTF::String::fromUTF8(g_value_get_string(value)));
+        break;
+    }
+    case PROP_NONDETERMINISTIC_SETTER_EXCEPTION_ATTR: {
+        WebCore::ExceptionCode ec = 0;
+        coreSelf-&gt;setNondeterministicSetterExceptionAttr(WTF::String::fromUTF8(g_value_get_string(value)), ec);
+        break;
+    }
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+        break;
+    }
+}
+
+static void webkit_dom_test_nondeterministic_get_property(GObject* object, guint propertyId, GValue* value, GParamSpec* pspec)
+{
+    WebCore::JSMainThreadNullState state;
+    WebKitDOMTestNondeterministic* self = WEBKIT_DOM_TEST_NONDETERMINISTIC(object);
+    WebCore::TestNondeterministic* coreSelf = WebKit::core(self);
+
+    switch (propertyId) {
+    case PROP_NONDETERMINISTIC_READONLY_ATTR: {
+        g_value_set_long(value, coreSelf-&gt;nondeterministicReadonlyAttr());
+        break;
+    }
+    case PROP_NONDETERMINISTIC_WRITEABLE_ATTR: {
+        g_value_take_string(value, convertToUTF8String(coreSelf-&gt;nondeterministicWriteableAttr()));
+        break;
+    }
+    case PROP_NONDETERMINISTIC_EXCEPTION_ATTR: {
+        g_value_take_string(value, convertToUTF8String(coreSelf-&gt;nondeterministicExceptionAttr()));
+        break;
+    }
+    case PROP_NONDETERMINISTIC_GETTER_EXCEPTION_ATTR: {
+        WebCore::ExceptionCode ec = 0;
+        g_value_take_string(value, convertToUTF8String(coreSelf-&gt;nondeterministicGetterExceptionAttr(ec)));
+        break;
+    }
+    case PROP_NONDETERMINISTIC_SETTER_EXCEPTION_ATTR: {
+        g_value_take_string(value, convertToUTF8String(coreSelf-&gt;nondeterministicSetterExceptionAttr()));
+        break;
+    }
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+        break;
+    }
+}
+
+static GObject* webkit_dom_test_nondeterministic_constructor(GType type, guint constructPropertiesCount, GObjectConstructParam* constructProperties)
+{
+    GObject* object = G_OBJECT_CLASS(webkit_dom_test_nondeterministic_parent_class)-&gt;constructor(type, constructPropertiesCount, constructProperties);
+
+    WebKitDOMTestNondeterministicPrivate* priv = WEBKIT_DOM_TEST_NONDETERMINISTIC_GET_PRIVATE(object);
+    priv-&gt;coreObject = static_cast&lt;WebCore::TestNondeterministic*&gt;(WEBKIT_DOM_OBJECT(object)-&gt;coreObject);
+    WebKit::DOMObjectCache::put(priv-&gt;coreObject.get(), object);
+
+    return object;
+}
+
+static void webkit_dom_test_nondeterministic_class_init(WebKitDOMTestNondeterministicClass* requestClass)
+{
+    GObjectClass* gobjectClass = G_OBJECT_CLASS(requestClass);
+    g_type_class_add_private(gobjectClass, sizeof(WebKitDOMTestNondeterministicPrivate));
+    gobjectClass-&gt;constructor = webkit_dom_test_nondeterministic_constructor;
+    gobjectClass-&gt;finalize = webkit_dom_test_nondeterministic_finalize;
+    gobjectClass-&gt;set_property = webkit_dom_test_nondeterministic_set_property;
+    gobjectClass-&gt;get_property = webkit_dom_test_nondeterministic_get_property;
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_NONDETERMINISTIC_READONLY_ATTR,
+        g_param_spec_long(
+            &quot;nondeterministic-readonly-attr&quot;,
+            &quot;TestNondeterministic:nondeterministic-readonly-attr&quot;,
+            &quot;read-only glong TestNondeterministic:nondeterministic-readonly-attr&quot;,
+            G_MINLONG, G_MAXLONG, 0,
+            WEBKIT_PARAM_READABLE));
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_NONDETERMINISTIC_WRITEABLE_ATTR,
+        g_param_spec_string(
+            &quot;nondeterministic-writeable-attr&quot;,
+            &quot;TestNondeterministic:nondeterministic-writeable-attr&quot;,
+            &quot;read-write gchar* TestNondeterministic:nondeterministic-writeable-attr&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_NONDETERMINISTIC_EXCEPTION_ATTR,
+        g_param_spec_string(
+            &quot;nondeterministic-exception-attr&quot;,
+            &quot;TestNondeterministic:nondeterministic-exception-attr&quot;,
+            &quot;read-write gchar* TestNondeterministic:nondeterministic-exception-attr&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_NONDETERMINISTIC_GETTER_EXCEPTION_ATTR,
+        g_param_spec_string(
+            &quot;nondeterministic-getter-exception-attr&quot;,
+            &quot;TestNondeterministic:nondeterministic-getter-exception-attr&quot;,
+            &quot;read-write gchar* TestNondeterministic:nondeterministic-getter-exception-attr&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
+    g_object_class_install_property(
+        gobjectClass,
+        PROP_NONDETERMINISTIC_SETTER_EXCEPTION_ATTR,
+        g_param_spec_string(
+            &quot;nondeterministic-setter-exception-attr&quot;,
+            &quot;TestNondeterministic:nondeterministic-setter-exception-attr&quot;,
+            &quot;read-write gchar* TestNondeterministic:nondeterministic-setter-exception-attr&quot;,
+            &quot;&quot;,
+            WEBKIT_PARAM_READWRITE));
+
+}
+
+static void webkit_dom_test_nondeterministic_init(WebKitDOMTestNondeterministic* request)
+{
+    WebKitDOMTestNondeterministicPrivate* priv = WEBKIT_DOM_TEST_NONDETERMINISTIC_GET_PRIVATE(request);
+    new (priv) WebKitDOMTestNondeterministicPrivate();
+}
+
+gboolean webkit_dom_test_nondeterministic_nondeterministic_zero_arg_function(WebKitDOMTestNondeterministic* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self), FALSE);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    gboolean result = item-&gt;nondeterministicZeroArgFunction();
+    return result;
+}
+
+glong webkit_dom_test_nondeterministic_get_nondeterministic_readonly_attr(WebKitDOMTestNondeterministic* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self), 0);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    glong result = item-&gt;nondeterministicReadonlyAttr();
+    return result;
+}
+
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_writeable_attr(WebKitDOMTestNondeterministic* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self), 0);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    gchar* result = convertToUTF8String(item-&gt;nondeterministicWriteableAttr());
+    return result;
+}
+
+void webkit_dom_test_nondeterministic_set_nondeterministic_writeable_attr(WebKitDOMTestNondeterministic* self, const gchar* value)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self));
+    g_return_if_fail(value);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    item-&gt;setNondeterministicWriteableAttr(convertedValue);
+}
+
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_exception_attr(WebKitDOMTestNondeterministic* self, GError** error)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self), 0);
+    g_return_val_if_fail(!error || !*error, 0);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    WebCore::ExceptionCode ec = 0;
+    gchar* result = convertToUTF8String(item-&gt;nondeterministicExceptionAttr(ec));
+    return result;
+}
+
+void webkit_dom_test_nondeterministic_set_nondeterministic_exception_attr(WebKitDOMTestNondeterministic* self, const gchar* value)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self));
+    g_return_if_fail(value);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    item-&gt;setNondeterministicExceptionAttr(convertedValue);
+}
+
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_getter_exception_attr(WebKitDOMTestNondeterministic* self, GError** error)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self), 0);
+    g_return_val_if_fail(!error || !*error, 0);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    WebCore::ExceptionCode ec = 0;
+    gchar* result = convertToUTF8String(item-&gt;nondeterministicGetterExceptionAttr(ec));
+    return result;
+}
+
+void webkit_dom_test_nondeterministic_set_nondeterministic_getter_exception_attr(WebKitDOMTestNondeterministic* self, const gchar* value)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self));
+    g_return_if_fail(value);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    item-&gt;setNondeterministicGetterExceptionAttr(convertedValue);
+}
+
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_setter_exception_attr(WebKitDOMTestNondeterministic* self)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_val_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self), 0);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    gchar* result = convertToUTF8String(item-&gt;nondeterministicSetterExceptionAttr());
+    return result;
+}
+
+void webkit_dom_test_nondeterministic_set_nondeterministic_setter_exception_attr(WebKitDOMTestNondeterministic* self, const gchar* value, GError** error)
+{
+    WebCore::JSMainThreadNullState state;
+    g_return_if_fail(WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(self));
+    g_return_if_fail(value);
+    g_return_if_fail(!error || !*error);
+    WebCore::TestNondeterministic* item = WebKit::core(self);
+    WTF::String convertedValue = WTF::String::fromUTF8(value);
+    WebCore::ExceptionCode ec = 0;
+    item-&gt;setNondeterministicSetterExceptionAttr(convertedValue, ec);
+    if (ec) {
+        WebCore::ExceptionCodeDescription ecdesc(ec);
+        g_set_error_literal(error, g_quark_from_string(&quot;WEBKIT_DOM&quot;), ecdesc.code, ecdesc.name);
+    }
+}
+
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministich"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.h        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,147 @@
</span><ins>+/*
+ *  This file is part of the WebKit open source project.
+ *  This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ */
+
+#if !defined(__WEBKITDOM_H_INSIDE__) &amp;&amp; !defined(BUILDING_WEBKIT)
+#error &quot;Only &lt;webkitdom/webkitdom.h&gt; can be included directly.&quot;
+#endif
+
+#ifndef WebKitDOMTestNondeterministic_h
+#define WebKitDOMTestNondeterministic_h
+
+#include &lt;glib-object.h&gt;
+#include &lt;webkitdom/WebKitDOMObject.h&gt;
+#include &lt;webkitdom/webkitdomdefines.h&gt;
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC            (webkit_dom_test_nondeterministic_get_type())
+#define WEBKIT_DOM_TEST_NONDETERMINISTIC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC, WebKitDOMTestNondeterministic))
+#define WEBKIT_DOM_TEST_NONDETERMINISTIC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC, WebKitDOMTestNondeterministicClass)
+#define WEBKIT_DOM_IS_TEST_NONDETERMINISTIC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC))
+#define WEBKIT_DOM_IS_TEST_NONDETERMINISTIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),  WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC))
+#define WEBKIT_DOM_TEST_NONDETERMINISTIC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),  WEBKIT_TYPE_DOM_TEST_NONDETERMINISTIC, WebKitDOMTestNondeterministicClass))
+
+struct _WebKitDOMTestNondeterministic {
+    WebKitDOMObject parent_instance;
+};
+
+struct _WebKitDOMTestNondeterministicClass {
+    WebKitDOMObjectClass parent_class;
+};
+
+WEBKIT_API GType
+webkit_dom_test_nondeterministic_get_type (void);
+
+/**
+ * webkit_dom_test_nondeterministic_nondeterministic_zero_arg_function:
+ * @self: A #WebKitDOMTestNondeterministic
+ *
+ * Returns: A #gboolean
+**/
+WEBKIT_API gboolean
+webkit_dom_test_nondeterministic_nondeterministic_zero_arg_function(WebKitDOMTestNondeterministic* self);
+
+/**
+ * webkit_dom_test_nondeterministic_get_nondeterministic_readonly_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ *
+ * Returns: A #glong
+**/
+WEBKIT_API glong
+webkit_dom_test_nondeterministic_get_nondeterministic_readonly_attr(WebKitDOMTestNondeterministic* self);
+
+/**
+ * webkit_dom_test_nondeterministic_get_nondeterministic_writeable_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ *
+ * Returns: A #gchar
+**/
+WEBKIT_API gchar*
+webkit_dom_test_nondeterministic_get_nondeterministic_writeable_attr(WebKitDOMTestNondeterministic* self);
+
+/**
+ * webkit_dom_test_nondeterministic_set_nondeterministic_writeable_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ * @value: A #gchar
+ *
+**/
+WEBKIT_API void
+webkit_dom_test_nondeterministic_set_nondeterministic_writeable_attr(WebKitDOMTestNondeterministic* self, const gchar* value);
+
+/**
+ * webkit_dom_test_nondeterministic_get_nondeterministic_exception_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ * @error: #GError
+ *
+ * Returns: A #gchar
+**/
+WEBKIT_API gchar*
+webkit_dom_test_nondeterministic_get_nondeterministic_exception_attr(WebKitDOMTestNondeterministic* self, GError** error);
+
+/**
+ * webkit_dom_test_nondeterministic_set_nondeterministic_exception_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ * @value: A #gchar
+ *
+**/
+WEBKIT_API void
+webkit_dom_test_nondeterministic_set_nondeterministic_exception_attr(WebKitDOMTestNondeterministic* self, const gchar* value);
+
+/**
+ * webkit_dom_test_nondeterministic_get_nondeterministic_getter_exception_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ * @error: #GError
+ *
+ * Returns: A #gchar
+**/
+WEBKIT_API gchar*
+webkit_dom_test_nondeterministic_get_nondeterministic_getter_exception_attr(WebKitDOMTestNondeterministic* self, GError** error);
+
+/**
+ * webkit_dom_test_nondeterministic_set_nondeterministic_getter_exception_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ * @value: A #gchar
+ *
+**/
+WEBKIT_API void
+webkit_dom_test_nondeterministic_set_nondeterministic_getter_exception_attr(WebKitDOMTestNondeterministic* self, const gchar* value);
+
+/**
+ * webkit_dom_test_nondeterministic_get_nondeterministic_setter_exception_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ *
+ * Returns: A #gchar
+**/
+WEBKIT_API gchar*
+webkit_dom_test_nondeterministic_get_nondeterministic_setter_exception_attr(WebKitDOMTestNondeterministic* self);
+
+/**
+ * webkit_dom_test_nondeterministic_set_nondeterministic_setter_exception_attr:
+ * @self: A #WebKitDOMTestNondeterministic
+ * @value: A #gchar
+ * @error: #GError
+ *
+**/
+WEBKIT_API void
+webkit_dom_test_nondeterministic_set_nondeterministic_setter_exception_attr(WebKitDOMTestNondeterministic* self, const gchar* value, GError** error);
+
+G_END_DECLS
+
+#endif /* WebKitDOMTestNondeterministic_h */
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministicsymbols"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministic.symbols        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+gboolean webkit_dom_test_nondeterministic_nondeterministic_zero_arg_function(WebKitDOMTestNondeterministic*)
+glong webkit_dom_test_nondeterministic_get_nondeterministic_readonly_attr(WebKitDOMTestNondeterministic*)
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_writeable_attr(WebKitDOMTestNondeterministic*)
+void webkit_dom_test_nondeterministic_set_nondeterministic_writeable_attr(WebKitDOMTestNondeterministic*, const gchar*)
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_exception_attr(WebKitDOMTestNondeterministic*, GError**)
+void webkit_dom_test_nondeterministic_set_nondeterministic_exception_attr(WebKitDOMTestNondeterministic*, const gchar*)
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_getter_exception_attr(WebKitDOMTestNondeterministic*, GError**)
+void webkit_dom_test_nondeterministic_set_nondeterministic_getter_exception_attr(WebKitDOMTestNondeterministic*, const gchar*)
+gchar* webkit_dom_test_nondeterministic_get_nondeterministic_setter_exception_attr(WebKitDOMTestNondeterministic*)
+void webkit_dom_test_nondeterministic_set_nondeterministic_setter_exception_attr(WebKitDOMTestNondeterministic*, const gchar*, GError**)
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestGObjectWebKitDOMTestNondeterministicPrivateh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNondeterministicPrivate.h        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+/*
+ *  This file is part of the WebKit open source project.
+ *  This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public License
+ *  along with this library; see the file COPYING.LIB.  If not, write to
+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WebKitDOMTestNondeterministicPrivate_h
+#define WebKitDOMTestNondeterministicPrivate_h
+
+#include &quot;TestNondeterministic.h&quot;
+#include &lt;webkitdom/WebKitDOMTestNondeterministic.h&gt;
+
+namespace WebKit {
+WebKitDOMTestNondeterministic* wrapTestNondeterministic(WebCore::TestNondeterministic*);
+WebKitDOMTestNondeterministic* kit(WebCore::TestNondeterministic*);
+WebCore::TestNondeterministic* core(WebKitDOMTestNondeterministic*);
+} // namespace WebKit
+
+#endif /* WebKitDOMTestNondeterministicPrivate_h */
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,497 @@
</span><ins>+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include &quot;config.h&quot;
+#include &quot;JSTestNondeterministic.h&quot;
+
+#include &quot;ExceptionCode.h&quot;
+#include &quot;JSDOMBinding.h&quot;
+#include &quot;ScriptExecutionContext.h&quot;
+#include &quot;TestNondeterministic.h&quot;
+#include &quot;URL.h&quot;
+#include &lt;runtime/Error.h&gt;
+#include &lt;runtime/JSString.h&gt;
+#include &lt;wtf/GetPtr.h&gt;
+
+#if ENABLE(WEB_REPLAY)
+#include &quot;MemoizedDOMResult.h&quot;
+#include &lt;replay/InputCursor.h&gt;
+#include &lt;wtf/NeverDestroyed.h&gt;
+#endif
+
+using namespace JSC;
+
+namespace WebCore {
+
+/* Hash table for constructor */
+
+static const struct CompactHashIndex JSTestNondeterministicConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestNondeterministicConstructorTableValues[] =
+{
+    { 0, 0, NoIntrinsic, 0, 0 }
+};
+
+static const HashTable JSTestNondeterministicConstructorTable = { 0, 0, false, JSTestNondeterministicConstructorTableValues, 0, JSTestNondeterministicConstructorTableIndex };
+const ClassInfo JSTestNondeterministicConstructor::s_info = { &quot;TestNondeterministicConstructor&quot;, &amp;Base::s_info, &amp;JSTestNondeterministicConstructorTable, 0, CREATE_METHOD_TABLE(JSTestNondeterministicConstructor) };
+
+JSTestNondeterministicConstructor::JSTestNondeterministicConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
+    : DOMConstructorObject(structure, globalObject)
+{
+}
+
+void JSTestNondeterministicConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject* globalObject)
+{
+    Base::finishCreation(vm);
+    ASSERT(inherits(info()));
+    putDirect(vm, vm.propertyNames-&gt;prototype, JSTestNondeterministicPrototype::self(vm, globalObject), DontDelete | ReadOnly);
+    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontDelete | DontEnum);
+}
+
+bool JSTestNondeterministicConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
+{
+    return getStaticValueSlot&lt;JSTestNondeterministicConstructor, JSDOMWrapper&gt;(exec, JSTestNondeterministicConstructorTable, jsCast&lt;JSTestNondeterministicConstructor*&gt;(object), propertyName, slot);
+}
+
+/* Hash table for prototype */
+
+static const struct CompactHashIndex JSTestNondeterministicPrototypeTableIndex[17] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { 6, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, 16 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 5, -1 },
+    { 4, -1 },
+};
+
+
+static const HashTableValue JSTestNondeterministicPrototypeTableValues[] =
+{
+    { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNondeterministicConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
+    { &quot;nondeterministicReadonlyAttr&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNondeterministicNondeterministicReadonlyAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
+    { &quot;nondeterministicWriteableAttr&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNondeterministicNondeterministicWriteableAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestNondeterministicNondeterministicWriteableAttr) },
+    { &quot;nondeterministicExceptionAttr&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNondeterministicNondeterministicExceptionAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestNondeterministicNondeterministicExceptionAttr) },
+    { &quot;nondeterministicGetterExceptionAttr&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNondeterministicNondeterministicGetterExceptionAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestNondeterministicNondeterministicGetterExceptionAttr) },
+    { &quot;nondeterministicSetterExceptionAttr&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNondeterministicNondeterministicSetterExceptionAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestNondeterministicNondeterministicSetterExceptionAttr) },
+    { &quot;nondeterministicZeroArgFunction&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunction), (intptr_t) (0) },
+};
+
+static const HashTable JSTestNondeterministicPrototypeTable = { 7, 15, true, JSTestNondeterministicPrototypeTableValues, 0, JSTestNondeterministicPrototypeTableIndex };
+const ClassInfo JSTestNondeterministicPrototype::s_info = { &quot;TestNondeterministicPrototype&quot;, &amp;Base::s_info, &amp;JSTestNondeterministicPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNondeterministicPrototype) };
+
+JSObject* JSTestNondeterministicPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return getDOMPrototype&lt;JSTestNondeterministic&gt;(vm, globalObject);
+}
+
+bool JSTestNondeterministicPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
+{
+    JSTestNondeterministicPrototype* thisObject = jsCast&lt;JSTestNondeterministicPrototype*&gt;(object);
+    return getStaticPropertySlot&lt;JSTestNondeterministicPrototype, JSObject&gt;(exec, JSTestNondeterministicPrototypeTable, thisObject, propertyName, slot);
+}
+
+const ClassInfo JSTestNondeterministic::s_info = { &quot;TestNondeterministic&quot;, &amp;Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestNondeterministic) };
+
+JSTestNondeterministic::JSTestNondeterministic(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr&lt;TestNondeterministic&gt; impl)
+    : JSDOMWrapper(structure, globalObject)
+    , m_impl(impl.leakRef())
+{
+}
+
+JSObject* JSTestNondeterministic::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return JSTestNondeterministicPrototype::create(vm, globalObject, JSTestNondeterministicPrototype::createStructure(vm, globalObject, globalObject-&gt;objectPrototype()));
+}
+
+void JSTestNondeterministic::destroy(JSC::JSCell* cell)
+{
+    JSTestNondeterministic* thisObject = static_cast&lt;JSTestNondeterministic*&gt;(cell);
+    thisObject-&gt;JSTestNondeterministic::~JSTestNondeterministic();
+}
+
+JSTestNondeterministic::~JSTestNondeterministic()
+{
+    releaseImplIfNotNull();
+}
+
+bool JSTestNondeterministic::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
+{
+    JSTestNondeterministic* thisObject = jsCast&lt;JSTestNondeterministic*&gt;(object);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+    return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
+}
+
+EncodedJSValue jsTestNondeterministicNondeterministicReadonlyAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNondeterministicPrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicReadonlyAttr&quot;);
+        return throwGetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicReadonlyAttr&quot;);
+    }
+#if ENABLE(WEB_REPLAY)
+    JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();
+    InputCursor&amp; cursor = globalObject-&gt;inputCursor();
+    static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicReadonlyAttr&quot;, AtomicString::ConstructFromLiteral);
+    if (cursor.isCapturing()) {
+        int memoizedResult = castedThis-&gt;impl().nondeterministicReadonlyAttr();
+        cursor.appendInput&lt;MemoizedDOMResult&lt;int&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
+        JSValue result = jsNumber(memoizedResult);
+        return JSValue::encode(result);
+     }
+
+     if (cursor.isReplaying()) {
+        int memoizedResult;
+        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
+        if (input &amp;&amp; input-&gt;convertTo&lt;int&gt;(memoizedResult)) {
+            JSValue result = jsNumber(memoizedResult);
+            return JSValue::encode(result);
+        }
+    }
+#endif
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    JSValue result = jsNumber(impl.nondeterministicReadonlyAttr());
+    return JSValue::encode(result);
+}
+
+
+EncodedJSValue jsTestNondeterministicNondeterministicWriteableAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNondeterministicPrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicWriteableAttr&quot;);
+        return throwGetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicWriteableAttr&quot;);
+    }
+#if ENABLE(WEB_REPLAY)
+    JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();
+    InputCursor&amp; cursor = globalObject-&gt;inputCursor();
+    static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicWriteableAttr&quot;, AtomicString::ConstructFromLiteral);
+    if (cursor.isCapturing()) {
+        String memoizedResult = castedThis-&gt;impl().nondeterministicWriteableAttr();
+        cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
+        JSValue result = jsStringWithCache(exec, memoizedResult);
+        return JSValue::encode(result);
+     }
+
+     if (cursor.isReplaying()) {
+        String memoizedResult;
+        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
+        if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
+            JSValue result = jsStringWithCache(exec, memoizedResult);
+            return JSValue::encode(result);
+        }
+    }
+#endif
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    JSValue result = jsStringWithCache(exec, impl.nondeterministicWriteableAttr());
+    return JSValue::encode(result);
+}
+
+
+EncodedJSValue jsTestNondeterministicNondeterministicExceptionAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNondeterministicPrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicExceptionAttr&quot;);
+        return throwGetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicExceptionAttr&quot;);
+    }
+#if ENABLE(WEB_REPLAY)
+    JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();
+    InputCursor&amp; cursor = globalObject-&gt;inputCursor();
+    static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicExceptionAttr&quot;, AtomicString::ConstructFromLiteral);
+    if (cursor.isCapturing()) {
+        String memoizedResult = castedThis-&gt;impl().nondeterministicExceptionAttr();
+        cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
+        JSValue result = jsStringWithCache(exec, memoizedResult);
+        return JSValue::encode(result);
+     }
+
+     if (cursor.isReplaying()) {
+        String memoizedResult;
+        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
+        if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
+            JSValue result = jsStringWithCache(exec, memoizedResult);
+            return JSValue::encode(result);
+        }
+    }
+#endif
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    JSValue result = jsStringWithCache(exec, impl.nondeterministicExceptionAttr());
+    return JSValue::encode(result);
+}
+
+
+EncodedJSValue jsTestNondeterministicNondeterministicGetterExceptionAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNondeterministicPrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicGetterExceptionAttr&quot;);
+        return throwGetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicGetterExceptionAttr&quot;);
+    }
+    ExceptionCode ec = 0;
+#if ENABLE(WEB_REPLAY)
+    JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();
+    InputCursor&amp; cursor = globalObject-&gt;inputCursor();
+    static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicGetterExceptionAttr&quot;, AtomicString::ConstructFromLiteral);
+    if (cursor.isCapturing()) {
+        String memoizedResult = castedThis-&gt;impl().nondeterministicGetterExceptionAttr(ec);
+        cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, ec);
+        JSValue result = jsStringWithCache(exec, memoizedResult);
+        setDOMException(exec, ec);
+        return JSValue::encode(result);
+     }
+
+     if (cursor.isReplaying()) {
+        String memoizedResult;
+        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
+        if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
+            JSValue result = jsStringWithCache(exec, memoizedResult);
+            setDOMException(exec, input-&gt;exceptionCode());
+            return JSValue::encode(result);
+        }
+    }
+#endif
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    JSValue result = jsStringWithCache(exec, impl.nondeterministicGetterExceptionAttr(ec));
+    setDOMException(exec, ec);
+    return JSValue::encode(result);
+}
+
+
+EncodedJSValue jsTestNondeterministicNondeterministicSetterExceptionAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast&lt;JSTestNondeterministicPrototype*&gt;(slotBase))
+            return reportDeprecatedGetterError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicSetterExceptionAttr&quot;);
+        return throwGetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicSetterExceptionAttr&quot;);
+    }
+#if ENABLE(WEB_REPLAY)
+    JSGlobalObject* globalObject = exec-&gt;lexicalGlobalObject();
+    InputCursor&amp; cursor = globalObject-&gt;inputCursor();
+    static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicSetterExceptionAttr&quot;, AtomicString::ConstructFromLiteral);
+    if (cursor.isCapturing()) {
+        String memoizedResult = castedThis-&gt;impl().nondeterministicSetterExceptionAttr();
+        cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
+        JSValue result = jsStringWithCache(exec, memoizedResult);
+        return JSValue::encode(result);
+     }
+
+     if (cursor.isReplaying()) {
+        String memoizedResult;
+        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
+        if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
+            JSValue result = jsStringWithCache(exec, memoizedResult);
+            return JSValue::encode(result);
+        }
+    }
+#endif
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    JSValue result = jsStringWithCache(exec, impl.nondeterministicSetterExceptionAttr());
+    return JSValue::encode(result);
+}
+
+
+EncodedJSValue jsTestNondeterministicConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue, PropertyName)
+{
+    JSTestNondeterministicPrototype* domObject = jsDynamicCast&lt;JSTestNondeterministicPrototype*&gt;(baseValue);
+    if (!domObject)
+        return throwVMTypeError(exec);
+    return JSValue::encode(JSTestNondeterministic::getConstructor(exec-&gt;vm(), domObject-&gt;globalObject()));
+}
+
+void setJSTestNondeterministicNondeterministicWriteableAttr(ExecState* exec, JSObject* /* baseObject */, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        throwSetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicWriteableAttr&quot;);
+        return;
+    }
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    const String&amp; nativeValue(value.isEmpty() ? String() : value.toString(exec)-&gt;value(exec));
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    impl.setNondeterministicWriteableAttr(nativeValue);
+}
+
+
+void setJSTestNondeterministicNondeterministicExceptionAttr(ExecState* exec, JSObject* /* baseObject */, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        throwSetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicExceptionAttr&quot;);
+        return;
+    }
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    const String&amp; nativeValue(value.isEmpty() ? String() : value.toString(exec)-&gt;value(exec));
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    impl.setNondeterministicExceptionAttr(nativeValue);
+}
+
+
+void setJSTestNondeterministicNondeterministicGetterExceptionAttr(ExecState* exec, JSObject* /* baseObject */, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        throwSetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicGetterExceptionAttr&quot;);
+        return;
+    }
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    const String&amp; nativeValue(value.isEmpty() ? String() : value.toString(exec)-&gt;value(exec));
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    impl.setNondeterministicGetterExceptionAttr(nativeValue);
+}
+
+
+void setJSTestNondeterministicNondeterministicSetterExceptionAttr(ExecState* exec, JSObject* /* baseObject */, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        throwSetterTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicSetterExceptionAttr&quot;);
+        return;
+    }
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    ExceptionCode ec = 0;
+    const String&amp; nativeValue(value.isEmpty() ? String() : value.toString(exec)-&gt;value(exec));
+    if (UNLIKELY(exec-&gt;hadException()))
+        return;
+    impl.setNondeterministicSetterExceptionAttr(nativeValue, ec);
+    setDOMException(exec, ec);
+}
+
+
+JSValue JSTestNondeterministic::getConstructor(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return getDOMConstructor&lt;JSTestNondeterministicConstructor&gt;(vm, jsCast&lt;JSDOMGlobalObject*&gt;(globalObject));
+}
+
+EncodedJSValue JSC_HOST_CALL jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunction(ExecState* exec)
+{
+    JSValue thisValue = exec-&gt;thisValue();
+    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(thisValue);
+    if (UNLIKELY(!castedThis))
+        return throwThisTypeError(*exec, &quot;TestNondeterministic&quot;, &quot;nondeterministicZeroArgFunction&quot;);
+    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestNondeterministic::info());
+    TestNondeterministic&amp; impl = castedThis-&gt;impl();
+    JSValue result;
+#if ENABLE(WEB_REPLAY)
+    InputCursor&amp; cursor = exec-&gt;lexicalGlobalObject()-&gt;inputCursor();
+    static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicZeroArgFunction&quot;, AtomicString::ConstructFromLiteral);
+    if (cursor.isCapturing()) {
+        bool memoizedResult = impl.nondeterministicZeroArgFunction();
+        cursor.appendInput&lt;MemoizedDOMResult&lt;bool&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
+        result = jsBoolean(memoizedResult);
+    } else if (cursor.isReplaying()) {
+        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
+        bool memoizedResult;
+        if (input &amp;&amp; input-&gt;convertTo&lt;bool&gt;(memoizedResult)) {
+            result = jsBoolean(memoizedResult);
+        } else
+            result = jsBoolean(impl.nondeterministicZeroArgFunction());
+    } else
+        result = jsBoolean(impl.nondeterministicZeroArgFunction());
+#else
+    result = jsBoolean(impl.nondeterministicZeroArgFunction());
+#endif
+    return JSValue::encode(result);
+}
+
+bool JSTestNondeterministicOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt; handle, void*, SlotVisitor&amp; visitor)
+{
+    UNUSED_PARAM(handle);
+    UNUSED_PARAM(visitor);
+    return false;
+}
+
+void JSTestNondeterministicOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt; handle, void* context)
+{
+    JSTestNondeterministic* jsTestNondeterministic = jsCast&lt;JSTestNondeterministic*&gt;(handle.slot()-&gt;asCell());
+    DOMWrapperWorld&amp; world = *static_cast&lt;DOMWrapperWorld*&gt;(context);
+    uncacheWrapper(world, &amp;jsTestNondeterministic-&gt;impl(), jsTestNondeterministic);
+    jsTestNondeterministic-&gt;releaseImpl();
+}
+
+#if ENABLE(BINDING_INTEGRITY)
+#if PLATFORM(WIN)
+#pragma warning(disable: 4483)
+extern &quot;C&quot; { extern void (*const __identifier(&quot;??_7TestNondeterministic@WebCore@@6B@&quot;)[])(); }
+#else
+extern &quot;C&quot; { extern void* _ZTVN7WebCore20TestNondeterministicE[]; }
+#endif
+#endif
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject* globalObject, TestNondeterministic* impl)
+{
+    if (!impl)
+        return jsNull();
+    if (JSValue result = getExistingWrapper&lt;JSTestNondeterministic&gt;(globalObject, impl))
+        return result;
+
+#if ENABLE(BINDING_INTEGRITY)
+    void* actualVTablePointer = *(reinterpret_cast&lt;void**&gt;(impl));
+#if PLATFORM(WIN)
+    void* expectedVTablePointer = reinterpret_cast&lt;void*&gt;(__identifier(&quot;??_7TestNondeterministic@WebCore@@6B@&quot;));
+#else
+    void* expectedVTablePointer = &amp;_ZTVN7WebCore20TestNondeterministicE[2];
+#if COMPILER(CLANG)
+    // If this fails TestNondeterministic does not have a vtable, so you need to add the
+    // ImplementationLacksVTable attribute to the interface definition
+    COMPILE_ASSERT(__is_polymorphic(TestNondeterministic), TestNondeterministic_is_not_polymorphic);
+#endif
+#endif
+    // If you hit this assertion you either have a use after free bug, or
+    // TestNondeterministic has subclasses. If TestNondeterministic has subclasses that get passed
+    // to toJS() we currently require TestNondeterministic you to opt out of binding hardening
+    // by adding the SkipVTableValidation attribute to the interface IDL definition
+    RELEASE_ASSERT(actualVTablePointer == expectedVTablePointer);
+#endif
+    return createNewWrapper&lt;JSTestNondeterministic&gt;(globalObject, impl);
+}
+
+TestNondeterministic* toTestNondeterministic(JSC::JSValue value)
+{
+    if (auto* wrapper = jsDynamicCast&lt;JSTestNondeterministic*&gt;(value))
+        return &amp;wrapper-&gt;impl();
+    return nullptr;
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,165 @@
</span><ins>+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef JSTestNondeterministic_h
+#define JSTestNondeterministic_h
+
+#include &quot;JSDOMBinding.h&quot;
+#include &quot;TestNondeterministic.h&quot;
+#include &lt;runtime/JSGlobalObject.h&gt;
+#include &lt;runtime/JSObject.h&gt;
+#include &lt;runtime/ObjectPrototype.h&gt;
+
+namespace WebCore {
+
+class JSTestNondeterministic : public JSDOMWrapper {
+public:
+    typedef JSDOMWrapper Base;
+    static JSTestNondeterministic* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr&lt;TestNondeterministic&gt; impl)
+    {
+        JSTestNondeterministic* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNondeterministic&gt;(globalObject-&gt;vm().heap)) JSTestNondeterministic(structure, globalObject, impl);
+        ptr-&gt;finishCreation(globalObject-&gt;vm());
+        return ptr;
+    }
+
+    static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
+    static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
+    static void destroy(JSC::JSCell*);
+    ~JSTestNondeterministic();
+    DECLARE_INFO;
+
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+    static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
+    TestNondeterministic&amp; impl() const { return *m_impl; }
+    void releaseImpl() { m_impl-&gt;deref(); m_impl = 0; }
+
+    void releaseImplIfNotNull()
+    {
+        if (m_impl) {
+            m_impl-&gt;deref();
+            m_impl = 0;
+        }
+    }
+
+private:
+    TestNondeterministic* m_impl;
+protected:
+    JSTestNondeterministic(JSC::Structure*, JSDOMGlobalObject*, PassRefPtr&lt;TestNondeterministic&gt;);
+
+    void finishCreation(JSC::VM&amp; vm)
+    {
+        Base::finishCreation(vm);
+        ASSERT(inherits(info()));
+    }
+
+    static const unsigned StructureFlags = JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
+};
+
+class JSTestNondeterministicOwner : public JSC::WeakHandleOwner {
+public:
+    virtual bool isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void* context, JSC::SlotVisitor&amp;);
+    virtual void finalize(JSC::Handle&lt;JSC::Unknown&gt;, void* context);
+};
+
+inline JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&amp;, TestNondeterministic*)
+{
+    DEPRECATED_DEFINE_STATIC_LOCAL(JSTestNondeterministicOwner, jsTestNondeterministicOwner, ());
+    return &amp;jsTestNondeterministicOwner;
+}
+
+inline void* wrapperContext(DOMWrapperWorld&amp; world, TestNondeterministic*)
+{
+    return &amp;world;
+}
+
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, TestNondeterministic*);
+TestNondeterministic* toTestNondeterministic(JSC::JSValue);
+
+class JSTestNondeterministicPrototype : public JSC::JSNonFinalObject {
+public:
+    typedef JSC::JSNonFinalObject Base;
+    static JSC::JSObject* self(JSC::VM&amp;, JSC::JSGlobalObject*);
+    static JSTestNondeterministicPrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestNondeterministicPrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNondeterministicPrototype&gt;(vm.heap)) JSTestNondeterministicPrototype(vm, globalObject, structure);
+        ptr-&gt;finishCreation(vm);
+        return ptr;
+    }
+
+    DECLARE_INFO;
+    static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+private:
+    JSTestNondeterministicPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
+protected:
+    static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
+};
+
+class JSTestNondeterministicConstructor : public DOMConstructorObject {
+private:
+    JSTestNondeterministicConstructor(JSC::Structure*, JSDOMGlobalObject*);
+    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject*);
+
+public:
+    typedef DOMConstructorObject Base;
+    static JSTestNondeterministicConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject* globalObject)
+    {
+        JSTestNondeterministicConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNondeterministicConstructor&gt;(vm.heap)) JSTestNondeterministicConstructor(structure, globalObject);
+        ptr-&gt;finishCreation(vm, globalObject);
+        return ptr;
+    }
+
+    static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
+    DECLARE_INFO;
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+protected:
+    static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::ImplementsHasInstance | DOMConstructorObject::StructureFlags;
+};
+
+// Functions
+
+JSC::EncodedJSValue JSC_HOST_CALL jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunction(JSC::ExecState*);
+// Attributes
+
+JSC::EncodedJSValue jsTestNondeterministicNondeterministicReadonlyAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestNondeterministicNondeterministicWriteableAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestNondeterministicNondeterministicWriteableAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestNondeterministicNondeterministicExceptionAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestNondeterministicNondeterministicExceptionAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestNondeterministicNondeterministicGetterExceptionAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestNondeterministicNondeterministicGetterExceptionAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestNondeterministicNondeterministicSetterExceptionAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestNondeterministicNondeterministicSetterExceptionAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestNondeterministicConstructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+
+} // namespace WebCore
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestNondeterministich"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.h (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.h        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig &lt;sam.weinig@gmail.com&gt;
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import &lt;WebCore/DOMObject.h&gt;
+
+@class NSString;
+
+WEBKIT_CLASS_AVAILABLE_MAC(TBD)
+@interface DOMTestNondeterministic : DOMObject
+@property (readonly) int nondeterministicReadonlyAttr;
+@property (copy) NSString *nondeterministicWriteableAttr;
+@property (copy) NSString *nondeterministicExceptionAttr;
+@property (copy) NSString *nondeterministicGetterExceptionAttr;
+@property (copy) NSString *nondeterministicSetterExceptionAttr;
+
+- (BOOL)nondeterministicZeroArgFunction;
+@end
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestNondeterministicmm"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.mm (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.mm                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministic.mm        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,148 @@
</span><ins>+/*
+ * This file is part of the WebKit open source project.
+ * This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import &quot;config.h&quot;
+#import &quot;DOMInternal.h&quot;
+
+#import &quot;DOMTestNondeterministic.h&quot;
+
+#import &quot;DOMNodeInternal.h&quot;
+#import &quot;DOMTestNondeterministicInternal.h&quot;
+#import &quot;ExceptionHandlers.h&quot;
+#import &quot;JSMainThreadExecState.h&quot;
+#import &quot;TestNondeterministic.h&quot;
+#import &quot;ThreadCheck.h&quot;
+#import &quot;URL.h&quot;
+#import &quot;WebCoreObjCExtras.h&quot;
+#import &quot;WebScriptObjectPrivate.h&quot;
+#import &lt;wtf/GetPtr.h&gt;
+
+#define IMPL reinterpret_cast&lt;WebCore::TestNondeterministic*&gt;(_internal)
+
+@implementation DOMTestNondeterministic
+
+- (void)dealloc
+{
+    if (WebCoreObjCScheduleDeallocateOnMainThread([DOMTestNondeterministic class], self))
+        return;
+
+    if (_internal)
+        IMPL-&gt;deref();
+    [super dealloc];
+}
+
+- (void)finalize
+{
+    if (_internal)
+        IMPL-&gt;deref();
+    [super finalize];
+}
+
+- (int)nondeterministicReadonlyAttr
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;nondeterministicReadonlyAttr();
+}
+
+- (NSString *)nondeterministicWriteableAttr
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;nondeterministicWriteableAttr();
+}
+
+- (void)setNondeterministicWriteableAttr:(NSString *)newNondeterministicWriteableAttr
+{
+    WebCore::JSMainThreadNullState state;
+    IMPL-&gt;setNondeterministicWriteableAttr(newNondeterministicWriteableAttr);
+}
+
+- (NSString *)nondeterministicExceptionAttr
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;nondeterministicExceptionAttr();
+}
+
+- (void)setNondeterministicExceptionAttr:(NSString *)newNondeterministicExceptionAttr
+{
+    WebCore::JSMainThreadNullState state;
+    IMPL-&gt;setNondeterministicExceptionAttr(newNondeterministicExceptionAttr);
+}
+
+- (NSString *)nondeterministicGetterExceptionAttr
+{
+    WebCore::JSMainThreadNullState state;
+    WebCore::ExceptionCode ec = 0;
+    NSString *result = IMPL-&gt;nondeterministicGetterExceptionAttr(ec);
+    WebCore::raiseOnDOMError(ec);
+    return result;
+}
+
+- (void)setNondeterministicGetterExceptionAttr:(NSString *)newNondeterministicGetterExceptionAttr
+{
+    WebCore::JSMainThreadNullState state;
+    IMPL-&gt;setNondeterministicGetterExceptionAttr(newNondeterministicGetterExceptionAttr);
+}
+
+- (NSString *)nondeterministicSetterExceptionAttr
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;nondeterministicSetterExceptionAttr();
+}
+
+- (void)setNondeterministicSetterExceptionAttr:(NSString *)newNondeterministicSetterExceptionAttr
+{
+    WebCore::JSMainThreadNullState state;
+    WebCore::ExceptionCode ec = 0;
+    IMPL-&gt;setNondeterministicSetterExceptionAttr(newNondeterministicSetterExceptionAttr, ec);
+    WebCore::raiseOnDOMError(ec);
+}
+
+- (BOOL)nondeterministicZeroArgFunction
+{
+    WebCore::JSMainThreadNullState state;
+    return IMPL-&gt;nondeterministicZeroArgFunction();
+}
+
+@end
+
+WebCore::TestNondeterministic* core(DOMTestNondeterministic *wrapper)
+{
+    return wrapper ? reinterpret_cast&lt;WebCore::TestNondeterministic*&gt;(wrapper-&gt;_internal) : 0;
+}
+
+DOMTestNondeterministic *kit(WebCore::TestNondeterministic* value)
+{
+    { DOM_ASSERT_MAIN_THREAD(); WebCoreThreadViolationCheckRoundOne(); };
+    if (!value)
+        return nil;
+    if (DOMTestNondeterministic *wrapper = getDOMWrapper(value))
+        return [[wrapper retain] autorelease];
+    DOMTestNondeterministic *wrapper = [[DOMTestNondeterministic alloc] _init];
+    wrapper-&gt;_internal = reinterpret_cast&lt;DOMObjectInternal*&gt;(value);
+    value-&gt;ref();
+    addDOMWrapper(wrapper, value);
+    return [wrapper autorelease];
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestObjCDOMTestNondeterministicInternalh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestNondeterministicInternal.h        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+/*
+ * This file is part of the WebKit open source project.
+ * This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import &lt;WebCore/DOMTestNondeterministic.h&gt;
+
+namespace WebCore {
+class TestNondeterministic;
+}
+
+WebCore::TestNondeterministic* core(DOMTestNondeterministic *);
+DOMTestNondeterministic *kit(WebCore::TestNondeterministic*);
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestNondeterministicidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/TestNondeterministic.idl (0 => 167140)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestNondeterministic.idl                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestNondeterministic.idl        2014-04-11 20:05:39 UTC (rev 167140)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2014 University of Washington. All rights reserved.
+ *
+ * Redistribution and use in source and binary formats, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. (&quot;Apple&quot;) nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// This IDL file is for testing the bindings code generator and for tracking
+// changes in its ouput.
+
+interface TestNondeterministic {
+    [Nondeterministic] readonly attribute long nondeterministicReadonlyAttr;
+    [Nondeterministic] attribute DOMString nondeterministicWriteableAttr;
+    [Nondeterministic, RaisesException] attribute DOMString nondeterministicExceptionAttr;
+    [Nondeterministic, GetterRaisesException] attribute DOMString nondeterministicGetterExceptionAttr;
+    [Nondeterministic, SetterRaisesException] attribute DOMString nondeterministicSetterExceptionAttr;
+
+    [Nondeterministic] boolean nondeterministicZeroArgFunction();
+};
</ins></span></pre>
</div>
</div>

</body>
</html>