<!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>[178756] 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/178756">178756</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-20 14:43:06 -0800 (Tue, 20 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/178751">r178751</a>.
https://bugs.webkit.org/show_bug.cgi?id=140694

Caused 32-bit JSC test failures (Requested by JoePeck on
#webkit).

Reverted changeset:

&quot;put_by_val_direct need to check the property is index or not
for using putDirect / putDirectIndex&quot;
https://bugs.webkit.org/show_bug.cgi?id=140426
http://trac.webkit.org/changeset/178751</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsresourcesjstestprejs">trunk/LayoutTests/resources/js-test-pre.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePutByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGOperationscpp">trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArgumentscpp">trunk/Source/JavaScriptCore/runtime/Arguments.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayPrototypecpp">trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSArraycpp">trunk/Source/JavaScriptCore/runtime/JSArray.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSCJSValuecpp">trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewInlinesh">trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectcpp">trunk/Source/JavaScriptCore/runtime/JSObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjecth">trunk/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSStringcpp">trunk/Source/JavaScriptCore/runtime/JSString.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSStringh">trunk/Source/JavaScriptCore/runtime/JSString.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLiteralParsercpp">trunk/Source/JavaScriptCore/runtime/LiteralParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimePropertyNameh">trunk/Source/JavaScriptCore/runtime/PropertyName.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimePropertyNameArraycpp">trunk/Source/JavaScriptCore/runtime/PropertyNameArray.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStringObjectcpp">trunk/Source/JavaScriptCore/runtime/StringObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStructurecpp">trunk/Source/JavaScriptCore/runtime/Structure.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSHTMLAllCollectionCustomcpp">trunk/Source/WebCore/bindings/js/JSHTMLAllCollectionCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSFloat64Arraycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebridgeruntime_arraycpp">trunk/Source/WebCore/bridge/runtime_array.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsdfgputbyvaldirectwithedgenumbersexpectedtxt">trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdfgputbyvaldirectwithedgenumbershtml">trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers.html</a></li>
<li><a href="#trunkLayoutTestsjsscripttestsdfgputbyvaldirectwithedgenumbersjs">trunk/LayoutTests/js/script-tests/dfg-put-by-val-direct-with-edge-numbers.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/LayoutTests/ChangeLog        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-01-20  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r178751.
+        https://bugs.webkit.org/show_bug.cgi?id=140694
+
+        Caused 32-bit JSC test failures (Requested by JoePeck on
+        #webkit).
+
+        Reverted changeset:
+
+        &quot;put_by_val_direct need to check the property is index or not
+        for using putDirect / putDirectIndex&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=140426
+        http://trac.webkit.org/changeset/178751
+
</ins><span class="cx"> 2015-01-20  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         put_by_val_direct need to check the property is index or not for using putDirect / putDirectIndex
</span></span></pre></div>
<a id="trunkLayoutTestsjsdfgputbyvaldirectwithedgenumbersexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers-expected.txt (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers-expected.txt        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers-expected.txt        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1,60 +0,0 @@
</span><del>-Test that a object accepts DFG PutByValueDirect operation with edge numbers.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS lookupWithKey(-0x80000001) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(-0x80000000) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(-1) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(1) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0x7fffffff) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0x80000000) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0xfffffffd) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0xfffffffe) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0xffffffff) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0x100000000) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-2147483649&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-2147483648&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-1&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;0&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;1&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;2147483647&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;2147483648&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;4294967293&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;4294967294&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;4294967295&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;4294967296&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.MIN_VALUE) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.MAX_VALUE) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.MIN_SAFE_INTEGER) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.MAX_SAFE_INTEGER) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.POSITIVE_INFINITY) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.NEGATIVE_INFINITY) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.NaN) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(Number.EPSILON) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(+0.0) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(-0.0) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(0.1) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(-0.1) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(4.2) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(-4.2) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;5e-324&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;1.7976931348623157e+308&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-9007199254740991&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;9007199254740991&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;Infinity&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-Infinity&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;NaN&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;2.220446049250313e-16&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;+0.0&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-0.0&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;0.1&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-0.1&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;4.2&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey(&quot;-4.2&quot;) is 42 on all iterations including after DFG tier-up.
-PASS lookupWithKey2(toStringThrowsError) threw exception 'Error: ng' on all iterations including after DFG tier-up.
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsjsdfgputbyvaldirectwithedgenumbershtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers.html (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers.html        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/LayoutTests/js/dfg-put-by-val-direct-with-edge-numbers.html        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;script src=&quot;../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;script src=&quot;script-tests/dfg-put-by-val-direct-with-edge-numbers.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsdfgputbyvaldirectwithedgenumbersjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/script-tests/dfg-put-by-val-direct-with-edge-numbers.js (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/dfg-put-by-val-direct-with-edge-numbers.js        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/LayoutTests/js/script-tests/dfg-put-by-val-direct-with-edge-numbers.js        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1,86 +0,0 @@
</span><del>-description(
-&quot;Test that a object accepts DFG PutByValueDirect operation with edge numbers.&quot;
-);
-
-function lookupWithKey(key) {
-    var object = {
-        [key]: 42
-    };
-    return object[key];
-}
-
-[
-    // integers
-    '-0x80000001',  // out of int32_t
-    '-0x80000000',  // int32_t min
-    '-1',           // negative
-    '0',            // zero
-    '1',            // positive
-    '0x7fffffff',   // int32_t max
-    '0x80000000',   // out of int32_t
-    '0xfffffffd',   // less than array max in JSObject
-    '0xfffffffe',   // array max in JSObject
-    '0xffffffff',   // uint32_t max, PropertyName::NotAnIndex
-    '0x100000000',  // out of uint32_t
-
-    // stringified integers
-    '&quot;' + (-0x80000001).toString() + '&quot;',  // out of int32_t
-    '&quot;' + (-0x80000000).toString() + '&quot;',  // int32_t min
-    '&quot;' + (-1).toString() + '&quot;',           // negative
-    '&quot;' + (0).toString() + '&quot;',            // zero
-    '&quot;' + (1).toString() + '&quot;',            // positive
-    '&quot;' + (0x7fffffff).toString() + '&quot;',   // int32_t max
-    '&quot;' + (0x80000000).toString() + '&quot;',   // out of int32_t
-    '&quot;' + (0xfffffffd).toString() + '&quot;',   // less than array max in JSObject
-    '&quot;' + (0xfffffffe).toString() + '&quot;',   // array max in JSObject
-    '&quot;' + (0xffffffff).toString() + '&quot;',   // uint32_t max).toString() PropertyName::NotAnIndex
-    '&quot;' + (0x100000000).toString() + '&quot;',  // out of uint32_t
-
-    // doubles
-    'Number.MIN_VALUE',
-    'Number.MAX_VALUE',
-    'Number.MIN_SAFE_INTEGER',
-    'Number.MAX_SAFE_INTEGER',
-    'Number.POSITIVE_INFINITY',
-    'Number.NEGATIVE_INFINITY',
-    'Number.NaN',
-    'Number.EPSILON',
-    '+0.0',
-    '-0.0',
-    '0.1',
-    '-0.1',
-    '4.2',
-    '-4.2',
-
-    // stringified doules
-    '&quot;' + (Number.MIN_VALUE).toString() + '&quot;',
-    '&quot;' + (Number.MAX_VALUE).toString() + '&quot;',
-    '&quot;' + (Number.MIN_SAFE_INTEGER).toString() + '&quot;',
-    '&quot;' + (Number.MAX_SAFE_INTEGER).toString() + '&quot;',
-    '&quot;' + (Number.POSITIVE_INFINITY).toString() + '&quot;',
-    '&quot;' + (Number.NEGATIVE_INFINITY).toString() + '&quot;',
-    '&quot;NaN&quot;',
-    '&quot;' + (Number.EPSILON).toString() + '&quot;',
-    '&quot;+0.0&quot;',
-    '&quot;-0.0&quot;',
-    '&quot;0.1&quot;',
-    '&quot;-0.1&quot;',
-    '&quot;4.2&quot;',
-    '&quot;-4.2&quot;',
-].forEach(function (key) {
-    dfgShouldBe(lookupWithKey, &quot;lookupWithKey(&quot;+ key + &quot;)&quot;, &quot;42&quot;);
-});
-
-function lookupWithKey2(key) {
-    var object = {
-        [key]: 42
-    };
-    return object[key];
-}
-
-var toStringThrowsError = {
-    toString: function () {
-        throw new Error('ng');
-    }
-};
-dfgShouldThrow(lookupWithKey2, &quot;lookupWithKey2(toStringThrowsError)&quot;, &quot;'Error: ng'&quot;);
</del></span></pre></div>
<a id="trunkLayoutTestsresourcesjstestprejs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/resources/js-test-pre.js (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/resources/js-test-pre.js        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/LayoutTests/resources/js-test-pre.js        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -617,54 +617,6 @@
</span><span class="cx">     testFailed(_a + &quot; should throw &quot; + (typeof _e == &quot;undefined&quot; ? &quot;an exception&quot; : _ev) + &quot;. Was &quot; + _av + &quot;.&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function dfgShouldThrow(theFunction, _a, _e)
-{
-  if (typeof theFunction != &quot;function&quot; || typeof _a != &quot;string&quot; || typeof _e != &quot;string&quot;)
-    debug(&quot;WARN: dfgShouldBe() expects a function and two strings&quot;);
-  noInline(theFunction);
-  var values = [], _av = undefined, notThrow = false;
-
-  // Defend against tests that muck with numeric properties on array.prototype.
-  values.__proto__ = null;
-  values.push = Array.prototype.push;
-
-  while (!dfgCompiled({f:theFunction})) {
-    try {
-        _av = eval(_a);
-        notThrow = true;
-    } catch (exception) {
-        values.push(exception);
-    }
-  }
-  try {
-    _av = eval(_a);
-    notThrow = true;
-  } catch (exception) {
-    values.push(exception);
-  }
-
-  var _ev = eval(_e);
-  if (notThrow) {
-    if (typeof _av == &quot;undefined&quot;)
-      testFailed(_a + &quot; should throw &quot; + (typeof _e == &quot;undefined&quot; ? &quot;an exception&quot; : _ev) + &quot;. Was undefined.&quot;);
-    else
-      testFailed(_a + &quot; should throw &quot; + (typeof _e == &quot;undefined&quot; ? &quot;an exception&quot; : _ev) + &quot;. Was &quot; + _av + &quot;.&quot;);
-  } else {
-    var allPassed = true;
-    for (var i = 0; i &lt; values.length; ++i) {
-      var _av = values[i];
-      if (typeof _e == &quot;undefined&quot; || _av == _ev)
-        continue;
-      testFailed(_a + &quot; should throw &quot; + (typeof _e == &quot;undefined&quot; ? &quot;an exception&quot; : _ev) + &quot;. Threw exception &quot; + _av + &quot;.&quot;);
-      allPassed = false;
-    }
-    if (allPassed)
-      testPassed(_a + &quot; threw exception &quot; + _e + &quot; on all iterations including after DFG tier-up.&quot;);
-  }
-
-  return values.length;
-}
-
</del><span class="cx"> function shouldHaveHadError(message)
</span><span class="cx"> {
</span><span class="cx">     if (errorMessage) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-01-20  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r178751.
+        https://bugs.webkit.org/show_bug.cgi?id=140694
+
+        Caused 32-bit JSC test failures (Requested by JoePeck on
+        #webkit).
+
+        Reverted changeset:
+
+        &quot;put_by_val_direct need to check the property is index or not
+        for using putDirect / putDirectIndex&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=140426
+        http://trac.webkit.org/changeset/178751
+
</ins><span class="cx"> 2015-01-20  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         put_by_val_direct need to check the property is index or not for using putDirect / putDirectIndex
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -270,7 +270,7 @@
</span><span class="cx">     if (set.isEmpty())
</span><span class="cx">         return GetByIdStatus();
</span><span class="cx"> 
</span><del>-    if (toUInt32FromStringImpl(uid))
</del><ins>+    if (toUInt32FromStringImpl(uid) != PropertyName::NotAnIndex)
</ins><span class="cx">         return GetByIdStatus(TakesSlowPath);
</span><span class="cx">     
</span><span class="cx">     GetByIdStatus result;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePutByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -310,7 +310,7 @@
</span><span class="cx"> 
</span><span class="cx"> PutByIdStatus PutByIdStatus::computeFor(JSGlobalObject* globalObject, const StructureSet&amp; set, AtomicStringImpl* uid, bool isDirect)
</span><span class="cx"> {
</span><del>-    if (toUInt32FromStringImpl(uid))
</del><ins>+    if (toUInt32FromStringImpl(uid) != PropertyName::NotAnIndex)
</ins><span class="cx">         return PutByIdStatus(TakesSlowPath);
</span><span class="cx"> 
</span><span class="cx">     if (set.isEmpty())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1491,7 +1491,9 @@
</span><span class="cx">     instructions().append(0);
</span><span class="cx">     instructions().append(0);
</span><span class="cx">     instructions().append(0);
</span><del>-    instructions().append(property != m_vm-&gt;propertyNames-&gt;underscoreProto &amp;&amp; !PropertyName(property).asIndex());
</del><ins>+    instructions().append(
+        property != m_vm-&gt;propertyNames-&gt;underscoreProto
+        &amp;&amp; PropertyName(property).asIndex() == PropertyName::NotAnIndex);
</ins><span class="cx">     return value;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -97,16 +97,14 @@
</span><span class="cx">     JSValue value = JSValue::decode(encodedValue);
</span><span class="cx"> 
</span><span class="cx">     if (LIKELY(property.isUInt32())) {
</span><del>-        uint32_t index = property.asUInt32();
-        ASSERT_WITH_MESSAGE(index != PropertyName::NotAnIndex, &quot;Since JSValue::isUInt32 returns true only when the boxed value is int32_t and positive, it doesn't return true for uint32_t max value that is PropertyName::NotAnIndex.&quot;);
-        putByVal&lt;strict, direct&gt;(exec, baseValue, index, value);
</del><ins>+        putByVal&lt;strict, direct&gt;(exec, baseValue, property.asUInt32(), value);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (property.isDouble()) {
</span><span class="cx">         double propertyAsDouble = property.asDouble();
</span><span class="cx">         uint32_t propertyAsUInt32 = static_cast&lt;uint32_t&gt;(propertyAsDouble);
</span><del>-        if (propertyAsDouble == propertyAsUInt32 &amp;&amp; propertyAsUInt32 != PropertyName::NotAnIndex) {
</del><ins>+        if (propertyAsDouble == propertyAsUInt32) {
</ins><span class="cx">             putByVal&lt;strict, direct&gt;(exec, baseValue, propertyAsUInt32, value);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -124,19 +122,14 @@
</span><span class="cx"> 
</span><span class="cx">     // Don't put to an object if toString throws an exception.
</span><span class="cx">     Identifier ident = property.toString(exec)-&gt;toIdentifier(exec);
</span><del>-    if (vm-&gt;exception())
-        return;
-
-    PutPropertySlot slot(baseValue, strict);
-    if (direct) {
-        PropertyName propertyName(ident);
-        RELEASE_ASSERT(baseValue.isObject());
-        if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-            asObject(baseValue)-&gt;putDirectIndex(exec, index.value(), value, 0, strict ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-        else
-            asObject(baseValue)-&gt;putDirect(*vm, propertyName, value, slot);
-    } else
-        baseValue.put(exec, ident, value, slot);
</del><ins>+    if (!vm-&gt;exception()) {
+        PutPropertySlot slot(baseValue, strict);
+        if (direct) {
+            RELEASE_ASSERT(baseValue.isObject());
+            asObject(baseValue)-&gt;putDirect(*vm, ident, value, slot);
+        } else
+            baseValue.put(exec, ident, value, slot);
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename ViewClass&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -51,7 +51,6 @@
</span><span class="cx"> #include &quot;JSWithScope.h&quot;
</span><span class="cx"> #include &quot;LegacyProfiler.h&quot;
</span><span class="cx"> #include &quot;ObjectConstructor.h&quot;
</span><del>-#include &quot;PropertyName.h&quot;
</del><span class="cx"> #include &quot;Repatch.h&quot;
</span><span class="cx"> #include &quot;RepatchBuffer.h&quot;
</span><span class="cx"> #include &quot;TestRunnerUtils.h&quot;
</span><span class="lines">@@ -481,41 +480,19 @@
</span><span class="cx"> 
</span><span class="cx"> static void directPutByVal(CallFrame* callFrame, JSObject* baseObject, JSValue subscript, JSValue value)
</span><span class="cx"> {
</span><del>-    bool isStrictMode = callFrame-&gt;codeBlock()-&gt;isStrictMode();
</del><span class="cx">     if (LIKELY(subscript.isUInt32())) {
</span><del>-        uint32_t index = subscript.asUInt32();
-        ASSERT_WITH_MESSAGE(index != PropertyName::NotAnIndex, &quot;Since JSValue::isUInt32 returns true only when the boxed value is int32_t and positive, it doesn't return true for uint32_t max value that is PropertyName::NotAnIndex.&quot;);
-        baseObject-&gt;putDirectIndex(callFrame, index, value, 0, isStrictMode ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-        return;
-    }
-
-    if (subscript.isDouble()) {
-        double subscriptAsDouble = subscript.asDouble();
-        uint32_t subscriptAsUInt32 = static_cast&lt;uint32_t&gt;(subscriptAsDouble);
-        if (subscriptAsDouble == subscriptAsUInt32 &amp;&amp; subscriptAsUInt32 != PropertyName::NotAnIndex) {
-            baseObject-&gt;putDirectIndex(callFrame, subscriptAsUInt32, value, 0, isStrictMode ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-            return;
</del><ins>+        uint32_t i = subscript.asUInt32();
+        baseObject-&gt;putDirectIndex(callFrame, i, value);
+    } else if (isName(subscript)) {
+        PutPropertySlot slot(baseObject, callFrame-&gt;codeBlock()-&gt;isStrictMode());
+        baseObject-&gt;putDirect(callFrame-&gt;vm(), jsCast&lt;NameInstance*&gt;(subscript.asCell())-&gt;privateName(), value, slot);
+    } else {
+        Identifier property = subscript.toString(callFrame)-&gt;toIdentifier(callFrame);
+        if (!callFrame-&gt;vm().exception()) { // Don't put to an object if toString threw an exception.
+            PutPropertySlot slot(baseObject, callFrame-&gt;codeBlock()-&gt;isStrictMode());
+            baseObject-&gt;putDirect(callFrame-&gt;vm(), property, value, slot);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><del>-
-    if (isName(subscript)) {
-        PutPropertySlot slot(baseObject, isStrictMode);
-        baseObject-&gt;putDirect(callFrame-&gt;vm(), jsCast&lt;NameInstance*&gt;(subscript.asCell())-&gt;privateName(), value, slot);
-        return;
-    }
-
-    // Don't put to an object if toString throws an exception.
-    Identifier property = subscript.toString(callFrame)-&gt;toIdentifier(callFrame);
-    if (callFrame-&gt;vm().exception())
-        return;
-
-    PropertyName propertyName(property);
-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-        baseObject-&gt;putDirectIndex(callFrame, index.value(), value, 0, isStrictMode ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-    else {
-        PutPropertySlot slot(baseObject, isStrictMode);
-        baseObject-&gt;putDirect(callFrame-&gt;vm(), propertyName, value, slot);
-    }
</del><span class="cx"> }
</span><span class="cx"> void JIT_OPERATION operationPutByVal(ExecState* exec, EncodedJSValue encodedBaseValue, EncodedJSValue encodedSubscript, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -989,7 +989,7 @@
</span><span class="cx"> {
</span><span class="cx">     PropertyName pname(ident);
</span><span class="cx">     Structure* oldStructure = structure;
</span><del>-    if (!oldStructure-&gt;isObject() || oldStructure-&gt;isDictionary() || pname.asIndex())
</del><ins>+    if (!oldStructure-&gt;isObject() || oldStructure-&gt;isDictionary() || pname.asIndex() != PropertyName::NotAnIndex)
</ins><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     PropertyOffset propertyOffset;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/jsc.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -334,9 +334,10 @@
</span><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-        if (index &amp;&amp; index.value() &lt; thisObject-&gt;getLength()) {
-            slot.setValue(thisObject, DontDelete | DontEnum, jsNumber(thisObject-&gt;m_vector[index.value()]));
</del><ins>+        unsigned index = propertyName.asIndex();
+        if (index &lt; thisObject-&gt;getLength()) {
+            ASSERT(index != PropertyName::NotAnIndex);
+            slot.setValue(thisObject, DontDelete | DontEnum, jsNumber(thisObject-&gt;m_vector[index]));
</ins><span class="cx">             return true;
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -819,42 +819,19 @@
</span><span class="cx">     JSValue value = LLINT_OP_C(3).jsValue();
</span><span class="cx">     RELEASE_ASSERT(baseValue.isObject());
</span><span class="cx">     JSObject* baseObject = asObject(baseValue);
</span><del>-    bool isStrictMode = exec-&gt;codeBlock()-&gt;isStrictMode();
</del><span class="cx">     if (LIKELY(subscript.isUInt32())) {
</span><del>-        uint32_t index = subscript.asUInt32();
-        ASSERT_WITH_MESSAGE(index != PropertyName::NotAnIndex, &quot;Since JSValue::isUInt32 returns true only when the boxed value is int32_t and positive, it doesn't return true for uint32_t max value that is PropertyName::NotAnIndex.&quot;);
-        baseObject-&gt;putDirectIndex(exec, index, value, 0, isStrictMode ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-        LLINT_END();
-    }
-
-
-    if (subscript.isDouble()) {
-        double subscriptAsDouble = subscript.asDouble();
-        uint32_t subscriptAsUInt32 = static_cast&lt;uint32_t&gt;(subscriptAsDouble);
-        if (subscriptAsDouble == subscriptAsUInt32 &amp;&amp; subscriptAsUInt32 != PropertyName::NotAnIndex) {
-            baseObject-&gt;putDirectIndex(exec, subscriptAsUInt32, value, 0, isStrictMode ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-            LLINT_END();
</del><ins>+        uint32_t i = subscript.asUInt32();
+        baseObject-&gt;putDirectIndex(exec, i, value);
+    } else if (isName(subscript)) {
+        PutPropertySlot slot(baseObject, exec-&gt;codeBlock()-&gt;isStrictMode());
+        baseObject-&gt;putDirect(exec-&gt;vm(), jsCast&lt;NameInstance*&gt;(subscript.asCell())-&gt;privateName(), value, slot);
+    } else {
+        Identifier property = subscript.toString(exec)-&gt;toIdentifier(exec);
+        if (!exec-&gt;vm().exception()) { // Don't put to an object if toString threw an exception.
+            PutPropertySlot slot(baseObject, exec-&gt;codeBlock()-&gt;isStrictMode());
+            baseObject-&gt;putDirect(exec-&gt;vm(), property, value, slot);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><del>-
-    if (isName(subscript)) {
-        PutPropertySlot slot(baseObject, isStrictMode);
-        baseObject-&gt;putDirect(exec-&gt;vm(), jsCast&lt;NameInstance*&gt;(subscript.asCell())-&gt;privateName(), value, slot);
-        LLINT_END();
-    }
-
-    // Don't put to an object if toString throws an exception.
-    Identifier property = subscript.toString(exec)-&gt;toIdentifier(exec);
-    if (exec-&gt;vm().exception())
-        LLINT_END();
-
-    PropertyName propertyName(property);
-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-        baseObject-&gt;putDirectIndex(exec, index.value(), value, 0, isStrictMode ? PutDirectIndexShouldThrow : PutDirectIndexShouldNotThrow);
-    else {
-        PutPropertySlot slot(baseObject, isStrictMode);
-        baseObject-&gt;putDirect(exec-&gt;vm(), propertyName, value, slot);
-    }
</del><span class="cx">     LLINT_END();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArgumentscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Arguments.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Arguments.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/Arguments.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -161,11 +161,11 @@
</span><span class="cx"> bool Arguments::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     Arguments* thisObject = jsCast&lt;Arguments*&gt;(object);
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        if (JSValue value = thisObject-&gt;tryGetArgument(index.value())) {
-            slot.setValue(thisObject, None, value);
-            return true;
-        }
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (JSValue value = thisObject-&gt;tryGetArgument(i)) {
+        RELEASE_ASSERT(i &lt; PropertyName::NotAnIndex);
+        slot.setValue(thisObject, None, value);
+        return true;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (propertyName == exec-&gt;propertyNames().length &amp;&amp; LIKELY(!thisObject-&gt;m_overrodeLength)) {
</span><span class="lines">@@ -224,8 +224,8 @@
</span><span class="cx"> void Arguments::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     Arguments* thisObject = jsCast&lt;Arguments*&gt;(cell);
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; thisObject-&gt;trySetArgument(exec-&gt;vm(), index.value(), value))
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (thisObject-&gt;trySetArgument(exec-&gt;vm(), i, value))
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (propertyName == exec-&gt;propertyNames().length &amp;&amp; !thisObject-&gt;m_overrodeLength) {
</span><span class="lines">@@ -267,11 +267,12 @@
</span><span class="cx">         return Base::deleteProperty(cell, exec, propertyName);
</span><span class="cx"> 
</span><span class="cx">     Arguments* thisObject = jsCast&lt;Arguments*&gt;(cell);
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; thisObject-&gt;m_numArguments) {
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i &lt; thisObject-&gt;m_numArguments) {
+        RELEASE_ASSERT(i &lt; PropertyName::NotAnIndex);
</ins><span class="cx">         if (!Base::deleteProperty(cell, exec, propertyName))
</span><span class="cx">             return false;
</span><del>-        if (thisObject-&gt;tryDeleteArgument(exec-&gt;vm(), index.value()))
</del><ins>+        if (thisObject-&gt;tryDeleteArgument(exec-&gt;vm(), i))
</ins><span class="cx">             return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -297,13 +298,13 @@
</span><span class="cx"> bool Arguments::defineOwnProperty(JSObject* object, ExecState* exec, PropertyName propertyName, const PropertyDescriptor&amp; descriptor, bool shouldThrow)
</span><span class="cx"> {
</span><span class="cx">     Arguments* thisObject = jsCast&lt;Arguments*&gt;(object);
</span><del>-    Optional&lt;uint32_t&gt; optionalIndex = propertyName.asIndex();
-    if (optionalIndex &amp;&amp; optionalIndex.value() &lt; thisObject-&gt;m_numArguments) {
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i &lt; thisObject-&gt;m_numArguments) {
+        RELEASE_ASSERT(i &lt; PropertyName::NotAnIndex);
</ins><span class="cx">         // If the property is not yet present on the object, and is not yet marked as deleted, then add it now.
</span><del>-        uint32_t index = optionalIndex.value();
</del><span class="cx">         PropertySlot slot(thisObject);
</span><del>-        if (!thisObject-&gt;isDeletedArgument(index) &amp;&amp; !JSObject::getOwnPropertySlot(thisObject, exec, propertyName, slot)) {
-            JSValue value = thisObject-&gt;tryGetArgument(index);
</del><ins>+        if (!thisObject-&gt;isDeletedArgument(i) &amp;&amp; !JSObject::getOwnPropertySlot(thisObject, exec, propertyName, slot)) {
+            JSValue value = thisObject-&gt;tryGetArgument(i);
</ins><span class="cx">             ASSERT(value);
</span><span class="cx">             object-&gt;putDirectMayBeIndex(exec, propertyName, value);
</span><span class="cx">         }
</span><span class="lines">@@ -312,20 +313,20 @@
</span><span class="cx"> 
</span><span class="cx">         // From ES 5.1, 10.6 Arguments Object
</span><span class="cx">         // 5. If the value of isMapped is not undefined, then
</span><del>-        if (thisObject-&gt;isArgument(index)) {
</del><ins>+        if (thisObject-&gt;isArgument(i)) {
</ins><span class="cx">             // a. If IsAccessorDescriptor(Desc) is true, then
</span><span class="cx">             if (descriptor.isAccessorDescriptor()) {
</span><span class="cx">                 // i. Call the [[Delete]] internal method of map passing P, and false as the arguments.
</span><del>-                thisObject-&gt;tryDeleteArgument(exec-&gt;vm(), index);
</del><ins>+                thisObject-&gt;tryDeleteArgument(exec-&gt;vm(), i);
</ins><span class="cx">             } else { // b. Else
</span><span class="cx">                 // i. If Desc.[[Value]] is present, then
</span><span class="cx">                 // 1. Call the [[Put]] internal method of map passing P, Desc.[[Value]], and Throw as the arguments.
</span><span class="cx">                 if (descriptor.value())
</span><del>-                    thisObject-&gt;trySetArgument(exec-&gt;vm(), index, descriptor.value());
</del><ins>+                    thisObject-&gt;trySetArgument(exec-&gt;vm(), i, descriptor.value());
</ins><span class="cx">                 // ii. If Desc.[[Writable]] is present and its value is false, then
</span><span class="cx">                 // 1. Call the [[Delete]] internal method of map passing P and false as arguments.
</span><span class="cx">                 if (descriptor.writablePresent() &amp;&amp; !descriptor.writable())
</span><del>-                    thisObject-&gt;tryDeleteArgument(exec-&gt;vm(), index);
</del><ins>+                    thisObject-&gt;tryDeleteArgument(exec-&gt;vm(), i);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -742,11 +742,10 @@
</span><span class="cx">     Vector&lt;uint32_t, 0, UnsafeVectorOverflow&gt; keys;
</span><span class="cx">     for (size_t i = 0; i &lt; nameArray.size(); ++i) {
</span><span class="cx">         PropertyName name = nameArray[i];
</span><del>-        Optional&lt;uint32_t&gt; optionalIndex = name.asIndex();
-        if (!optionalIndex)
</del><ins>+        uint32_t index = name.asIndex();
+        if (index == PropertyName::NotAnIndex)
</ins><span class="cx">             continue;
</span><del>-
-        uint32_t index = optionalIndex.value();
</del><ins>+        
</ins><span class="cx">         JSValue value = getOrHole(thisObj, exec, index);
</span><span class="cx">         if (exec-&gt;hadException())
</span><span class="cx">             return JSValue::encode(jsUndefined());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSArraycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSArray.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSArray.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSArray.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -158,9 +158,9 @@
</span><span class="cx"> 
</span><span class="cx">     // 4. Else if P is an array index (15.4), then
</span><span class="cx">     // a. Let index be ToUint32(P).
</span><del>-    if (Optional&lt;uint32_t&gt; optionalIndex = propertyName.asIndex()) {
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
</ins><span class="cx">         // b. Reject if index &gt;= oldLen and oldLenDesc.[[Writable]] is false.
</span><del>-        uint32_t index = optionalIndex.value();
</del><span class="cx">         if (index &gt;= array-&gt;length() &amp;&amp; !array-&gt;isLengthWritable())
</span><span class="cx">             return reject(exec, throwException, &quot;Attempting to define numeric property on array with non-writable length property.&quot;);
</span><span class="cx">         // c. Let succeeded be the result of calling the default [[DefineOwnProperty]] internal method (8.12.9) on A passing P, Desc, and false as arguments.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSCJSValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSCJSValue.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -119,8 +119,9 @@
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = exec-&gt;vm();
</span><span class="cx"> 
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        putToPrimitiveByIndex(exec, index.value(), value, slot.isStrictMode());
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
+        putToPrimitiveByIndex(exec, index, value, slot.isStrictMode());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -302,9 +302,9 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; thisObject-&gt;canGetIndexQuickly(index.value())) {
-        slot.setValue(thisObject, DontDelete | ReadOnly, thisObject-&gt;getIndexQuickly(index.value()));
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex &amp;&amp; thisObject-&gt;canGetIndexQuickly(index)) {
+        slot.setValue(thisObject, DontDelete | ReadOnly, thisObject-&gt;getIndexQuickly(index));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -324,8 +324,9 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        putByIndex(thisObject, exec, index.value(), value, slot.isStrictMode());
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
+        putByIndex(thisObject, exec, index, value, slot.isStrictMode());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -342,7 +343,8 @@
</span><span class="cx">     // This is matching Firefox behavior. In particular, it rejects all attempts to
</span><span class="cx">     // defineOwnProperty for indexed properties on typed arrays, even if they're out
</span><span class="cx">     // of bounds.
</span><del>-    if (propertyName == exec-&gt;propertyNames().length || propertyName.asIndex())
</del><ins>+    if (propertyName == exec-&gt;propertyNames().length
+        || propertyName.asIndex() != PropertyName::NotAnIndex)
</ins><span class="cx">         return reject(exec, shouldThrow, &quot;Attempting to write to a read-only typed array property.&quot;);
</span><span class="cx">     
</span><span class="cx">     return Base::defineOwnProperty(thisObject, exec, propertyName, descriptor, shouldThrow);
</span><span class="lines">@@ -354,7 +356,8 @@
</span><span class="cx"> {
</span><span class="cx">     JSGenericTypedArrayView* thisObject = jsCast&lt;JSGenericTypedArrayView*&gt;(cell);
</span><span class="cx">     
</span><del>-    if (propertyName == exec-&gt;propertyNames().length || propertyName.asIndex())
</del><ins>+    if (propertyName == exec-&gt;propertyNames().length
+        || propertyName.asIndex() != PropertyName::NotAnIndex)
</ins><span class="cx">         return false;
</span><span class="cx">     
</span><span class="cx">     return Base::deleteProperty(thisObject, exec, propertyName);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -339,8 +339,9 @@
</span><span class="cx">     
</span><span class="cx">     // Try indexed put first. This is required for correctness, since loads on property names that appear like
</span><span class="cx">     // valid indices will never look in the named property storage.
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        putByIndex(thisObject, exec, index.value(), value, slot.isStrictMode());
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i != PropertyName::NotAnIndex) {
+        putByIndex(thisObject, exec, i, value, slot.isStrictMode());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -1197,8 +1198,9 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(value.isGetterSetter() &amp;&amp; (attributes &amp; Accessor));
</span><span class="cx"> 
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        putDirectIndex(exec, index.value(), value, attributes, PutDirectIndexLikePutDirect);
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
+        putDirectIndex(exec, index, value, attributes, PutDirectIndexLikePutDirect);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1207,7 +1209,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSObject::putDirectCustomAccessor(VM&amp; vm, PropertyName propertyName, JSValue value, unsigned attributes)
</span><span class="cx"> {
</span><del>-    ASSERT(!propertyName.asIndex());
</del><ins>+    ASSERT(propertyName.asIndex() == PropertyName::NotAnIndex);
</ins><span class="cx"> 
</span><span class="cx">     PutPropertySlot slot(this);
</span><span class="cx">     putDirectInternal&lt;PutModeDefineOwnProperty&gt;(vm, propertyName, value, attributes, slot);
</span><span class="lines">@@ -1255,8 +1257,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSObject* thisObject = jsCast&lt;JSObject*&gt;(cell);
</span><span class="cx">     
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-        return thisObject-&gt;methodTable(exec-&gt;vm())-&gt;deletePropertyByIndex(thisObject, exec, index.value());
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i != PropertyName::NotAnIndex)
+        return thisObject-&gt;methodTable(exec-&gt;vm())-&gt;deletePropertyByIndex(thisObject, exec, i);
</ins><span class="cx"> 
</span><span class="cx">     if (!thisObject-&gt;staticFunctionsReified())
</span><span class="cx">         thisObject-&gt;reifyStaticFunctionsForDelete(exec);
</span><span class="lines">@@ -2499,10 +2502,11 @@
</span><span class="cx"> 
</span><span class="cx"> void JSObject::putDirectMayBeIndex(ExecState* exec, PropertyName propertyName, JSValue value)
</span><span class="cx"> {
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-        putDirectIndex(exec, index.value(), value);
</del><ins>+    unsigned asIndex = propertyName.asIndex();
+    if (asIndex == PropertyName::NotAnIndex)
+        putDirect(exec-&gt;vm(), propertyName, value);
</ins><span class="cx">     else
</span><del>-        putDirect(exec-&gt;vm(), propertyName, value);
</del><ins>+        putDirectIndex(exec, asIndex, value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class DefineOwnPropertyScope {
</span><span class="lines">@@ -2655,14 +2659,15 @@
</span><span class="cx"> bool JSObject::defineOwnProperty(JSObject* object, ExecState* exec, PropertyName propertyName, const PropertyDescriptor&amp; descriptor, bool throwException)
</span><span class="cx"> {
</span><span class="cx">     // If it's an array index, then use the indexed property storage.
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
</ins><span class="cx">         // c. Let succeeded be the result of calling the default [[DefineOwnProperty]] internal method (8.12.9) on A passing P, Desc, and false as arguments.
</span><span class="cx">         // d. Reject if succeeded is false.
</span><span class="cx">         // e. If index &gt;= oldLen
</span><span class="cx">         // e.i. Set oldLenDesc.[[Value]] to index + 1.
</span><span class="cx">         // e.ii. Call the default [[DefineOwnProperty]] internal method (8.12.9) on A passing &quot;length&quot;, oldLenDesc, and false as arguments. This call will always return true.
</span><span class="cx">         // f. Return true.
</span><del>-        return object-&gt;defineOwnIndexedProperty(exec, index.value(), descriptor, throwException);
</del><ins>+        return object-&gt;defineOwnIndexedProperty(exec, index, descriptor, throwException);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     return object-&gt;defineOwnNonIndexProperty(exec, propertyName, descriptor, throwException);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.h (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.h        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.h        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1244,8 +1244,9 @@
</span><span class="cx">     Structure&amp; structure = *object-&gt;structure(vm);
</span><span class="cx">     if (object-&gt;inlineGetOwnPropertySlot(vm, structure, propertyName, slot))
</span><span class="cx">         return true;
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-        return getOwnPropertySlotByIndex(object, exec, index.value(), slot);
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex)
+        return getOwnPropertySlotByIndex(object, exec, index, slot);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1273,8 +1274,9 @@
</span><span class="cx">         object = asObject(prototype);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex())
-        return getPropertySlot(exec, index.value(), slot);
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex)
+        return getPropertySlot(exec, index, slot);
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1318,7 +1320,7 @@
</span><span class="cx">     ASSERT(value);
</span><span class="cx">     ASSERT(value.isGetterSetter() == !!(attributes &amp; Accessor));
</span><span class="cx">     ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
</span><del>-    ASSERT(!propertyName.asIndex());
</del><ins>+    ASSERT(propertyName.asIndex() == PropertyName::NotAnIndex);
</ins><span class="cx"> 
</span><span class="cx">     Structure* structure = this-&gt;structure(vm);
</span><span class="cx">     if (structure-&gt;isDictionary()) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSStringcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSString.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSString.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSString.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -425,9 +425,10 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; m_length) {
-        descriptor.setDescriptor(getIndex(exec, index.value()), DontDelete | ReadOnly);
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i &lt; m_length) {
+        ASSERT(i != PropertyName::NotAnIndex); // No need for an explicit check, the above test would always fail!
+        descriptor.setDescriptor(getIndex(exec, i), DontDelete | ReadOnly);
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSStringh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSString.h (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSString.h        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/JSString.h        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -626,9 +626,10 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; m_length) {
-        slot.setValue(this, DontDelete | ReadOnly, getIndex(exec, index.value()));
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i &lt; m_length) {
+        ASSERT(i != PropertyName::NotAnIndex); // No need for an explicit check, the above test would always fail!
+        slot.setValue(this, DontDelete | ReadOnly, getIndex(exec, i));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLiteralParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/LiteralParser.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/LiteralParser.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/LiteralParser.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -649,8 +649,9 @@
</span><span class="cx">             {
</span><span class="cx">                 JSObject* object = asObject(objectStack.last());
</span><span class="cx">                 PropertyName ident = identifierStack.last();
</span><del>-                if (Optional&lt;uint32_t&gt; index = ident.asIndex())
-                    object-&gt;putDirectIndex(m_exec, index.value(), lastValue);
</del><ins>+                unsigned i = ident.asIndex();
+                if (i != PropertyName::NotAnIndex)
+                    object-&gt;putDirectIndex(m_exec, i, lastValue);
</ins><span class="cx">                 else
</span><span class="cx">                     object-&gt;putDirect(m_exec-&gt;vm(), ident, lastValue);
</span><span class="cx">                 identifierStack.removeLast();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimePropertyNameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/PropertyName.h (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/PropertyName.h        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/PropertyName.h        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -28,51 +28,48 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Identifier.h&quot;
</span><span class="cx"> #include &quot;PrivateName.h&quot;
</span><del>-#include &lt;wtf/Optional.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename CharType&gt;
</span><del>-ALWAYS_INLINE Optional&lt;uint32_t&gt; toUInt32FromCharacters(const CharType* characters, unsigned length)
</del><ins>+ALWAYS_INLINE uint32_t toUInt32FromCharacters(const CharType* characters, unsigned length)
</ins><span class="cx"> {
</span><span class="cx">     // An empty string is not a number.
</span><span class="cx">     if (!length)
</span><del>-        return Nullopt;
</del><ins>+        return UINT_MAX;
</ins><span class="cx"> 
</span><span class="cx">     // Get the first character, turning it into a digit.
</span><span class="cx">     uint32_t value = characters[0] - '0';
</span><span class="cx">     if (value &gt; 9)
</span><del>-        return Nullopt;
</del><ins>+        return UINT_MAX;
</ins><span class="cx">     
</span><span class="cx">     // Check for leading zeros. If the first characher is 0, then the
</span><span class="cx">     // length of the string must be one - e.g. &quot;042&quot; is not equal to &quot;42&quot;.
</span><span class="cx">     if (!value &amp;&amp; length &gt; 1)
</span><del>-        return Nullopt;
</del><ins>+        return UINT_MAX;
</ins><span class="cx">     
</span><span class="cx">     while (--length) {
</span><span class="cx">         // Multiply value by 10, checking for overflow out of 32 bits.
</span><span class="cx">         if (value &gt; 0xFFFFFFFFU / 10)
</span><del>-            return Nullopt;
</del><ins>+            return UINT_MAX;
</ins><span class="cx">         value *= 10;
</span><span class="cx">         
</span><span class="cx">         // Get the next character, turning it into a digit.
</span><span class="cx">         uint32_t newValue = *(++characters) - '0';
</span><span class="cx">         if (newValue &gt; 9)
</span><del>-            return Nullopt;
</del><ins>+            return UINT_MAX;
</ins><span class="cx">         
</span><span class="cx">         // Add in the old value, checking for overflow out of 32 bits.
</span><span class="cx">         newValue += value;
</span><span class="cx">         if (newValue &lt; value)
</span><del>-            return Nullopt;
</del><ins>+            return UINT_MAX;
</ins><span class="cx">         value = newValue;
</span><span class="cx">     }
</span><del>-
-    if (value == UINT_MAX)
-        return Nullopt;
</del><ins>+    
</ins><span class="cx">     return value;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE Optional&lt;uint32_t&gt; toUInt32FromStringImpl(StringImpl* impl)
</del><ins>+ALWAYS_INLINE uint32_t toUInt32FromStringImpl(StringImpl* impl)
</ins><span class="cx"> {
</span><span class="cx">     if (impl-&gt;is8Bit())
</span><span class="cx">         return toUInt32FromCharacters(impl-&gt;characters8(), impl-&gt;length());
</span><span class="lines">@@ -112,11 +109,11 @@
</span><span class="cx"> 
</span><span class="cx">     static const uint32_t NotAnIndex = UINT_MAX;
</span><span class="cx"> 
</span><del>-    Optional&lt;uint32_t&gt; asIndex()
</del><ins>+    uint32_t asIndex()
</ins><span class="cx">     {
</span><del>-        return m_impl ? toUInt32FromStringImpl(m_impl) : Nullopt;
</del><ins>+        return m_impl ? toUInt32FromStringImpl(m_impl) : NotAnIndex;
</ins><span class="cx">     }
</span><del>-
</del><ins>+    
</ins><span class="cx">     void dump(PrintStream&amp; out) const
</span><span class="cx">     {
</span><span class="cx">         if (m_impl)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimePropertyNameArraycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/PropertyNameArray.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/PropertyNameArray.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/PropertyNameArray.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -33,8 +33,8 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!identifier || identifier == StringImpl::empty() || identifier-&gt;isAtomic());
</span><span class="cx">     if (!ASSERT_DISABLED) {
</span><del>-        Optional&lt;uint32_t&gt; index = PropertyName(Identifier(m_vm, identifier)).asIndex();
-        ASSERT_UNUSED(index, !index || index.value() &gt;= m_previouslyEnumeratedLength);
</del><ins>+        uint32_t index = PropertyName(Identifier(m_vm, identifier)).asIndex();
+        ASSERT_UNUSED(index, index == PropertyName::NotAnIndex || index &gt;= m_previouslyEnumeratedLength);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_alternateSet &amp;&amp; m_alternateSet-&gt;contains(identifier))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStringObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StringObject.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StringObject.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/StringObject.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -128,8 +128,9 @@
</span><span class="cx">     StringObject* thisObject = jsCast&lt;StringObject*&gt;(cell);
</span><span class="cx">     if (propertyName == exec-&gt;propertyNames().length)
</span><span class="cx">         return false;
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; thisObject-&gt;internalValue()-&gt;canGetIndex(index.value())) {
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (thisObject-&gt;internalValue()-&gt;canGetIndex(i)) {
+        ASSERT(i != PropertyName::NotAnIndex); // No need for an explicit check, the above test would always fail!
</ins><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx">     return JSObject::deleteProperty(thisObject, exec, propertyName);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStructurecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Structure.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Structure.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/JavaScriptCore/runtime/Structure.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1010,7 +1010,8 @@
</span><span class="cx"> 
</span><span class="cx"> bool Structure::prototypeChainMayInterceptStoreTo(VM&amp; vm, PropertyName propertyName)
</span><span class="cx"> {
</span><del>-    if (propertyName.asIndex())
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i != PropertyName::NotAnIndex)
</ins><span class="cx">         return anyObjectInChainMayInterceptIndexedAccesses();
</span><span class="cx">     
</span><span class="cx">     for (Structure* current = this; ;) {
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/ChangeLog        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-01-20  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r178751.
+        https://bugs.webkit.org/show_bug.cgi?id=140694
+
+        Caused 32-bit JSC test failures (Requested by JoePeck on
+        #webkit).
+
+        Reverted changeset:
+
+        &quot;put_by_val_direct need to check the property is index or not
+        for using putDirect / putDirectIndex&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=140426
+        http://trac.webkit.org/changeset/178751
+
</ins><span class="cx"> 2015-01-20  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Simple line layout: Use FlowContents::Segment::text instead of renderer when possible.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -214,10 +214,11 @@
</span><span class="cx">     // We need to test the correct priority order.
</span><span class="cx"> 
</span><span class="cx">     // allow window[1] or parent[1] etc. (#56983)
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; thisObject-&gt;impl().frame()-&gt;tree().scopedChildCount()) {
</del><ins>+    unsigned i = propertyName.asIndex();
+    if (i &lt; thisObject-&gt;impl().frame()-&gt;tree().scopedChildCount()) {
+        ASSERT(i != PropertyName::NotAnIndex);
</ins><span class="cx">         slot.setValue(thisObject, ReadOnly | DontDelete | DontEnum,
</span><del>-            toJS(exec, thisObject-&gt;impl().frame()-&gt;tree().scopedChild(index.value())-&gt;document()-&gt;domWindow()));
</del><ins>+            toJS(exec, thisObject-&gt;impl().frame()-&gt;tree().scopedChild(i)-&gt;document()-&gt;domWindow()));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSHTMLAllCollectionCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSHTMLAllCollectionCustom.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSHTMLAllCollectionCustom.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/bindings/js/JSHTMLAllCollectionCustom.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -65,8 +65,9 @@
</span><span class="cx">     if (exec-&gt;argumentCount() == 1) {
</span><span class="cx">         // Support for document.all(&lt;index&gt;) etc.
</span><span class="cx">         String string = exec-&gt;argument(0).toString(exec)-&gt;value(exec);
</span><del>-        if (Optional&lt;uint32_t&gt; index = toUInt32FromStringImpl(string.impl()))
-            return JSValue::encode(toJS(exec, jsCollection-&gt;globalObject(), collection.item(index.value())));
</del><ins>+        unsigned index = toUInt32FromStringImpl(string.impl());
+        if (index != PropertyName::NotAnIndex)
+            return JSValue::encode(toJS(exec, jsCollection-&gt;globalObject(), collection.item(index)));
</ins><span class="cx"> 
</span><span class="cx">         // Support for document.images('&lt;name&gt;') etc.
</span><span class="cx">         return JSValue::encode(namedItems(exec, jsCollection, Identifier(exec, string)));
</span><span class="lines">@@ -74,8 +75,9 @@
</span><span class="cx"> 
</span><span class="cx">     // The second arg, if set, is the index of the item we want
</span><span class="cx">     String string = exec-&gt;argument(0).toString(exec)-&gt;value(exec);
</span><del>-    if (Optional&lt;uint32_t&gt; index = toUInt32FromStringImpl(exec-&gt;argument(1).toWTFString(exec).impl())) {
-        if (auto* item = collection.namedItemWithIndex(string, index.value()))
</del><ins>+    unsigned index = toUInt32FromStringImpl(exec-&gt;argument(1).toWTFString(exec).impl());
+    if (index != PropertyName::NotAnIndex) {
+        if (auto* item = collection.namedItemWithIndex(string, index))
</ins><span class="cx">             return JSValue::encode(toJS(exec, jsCollection-&gt;globalObject(), item));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -101,8 +103,9 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue JSHTMLAllCollection::item(ExecState* exec)
</span><span class="cx"> {
</span><del>-    if (Optional&lt;uint32_t&gt; index = toUInt32FromStringImpl(exec-&gt;argument(0).toString(exec)-&gt;value(exec).impl()))
-        return toJS(exec, globalObject(), impl().item(index.value()));
</del><ins>+    uint32_t index = toUInt32FromStringImpl(exec-&gt;argument(0).toString(exec)-&gt;value(exec).impl());
+    if (index != PropertyName::NotAnIndex)
+        return toJS(exec, globalObject(), impl().item(index));
</ins><span class="cx">     return namedItems(exec, this, Identifier(exec, exec-&gt;argument(0).toString(exec)-&gt;value(exec)));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -360,16 +360,15 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if ($indexedGetterFunction) {
</span><del>-        push(@getOwnPropertySlotImpl, &quot;    Optional&lt;uint32_t&gt; optionalIndex = propertyName.asIndex();\n&quot;);
</del><ins>+        push(@getOwnPropertySlotImpl, &quot;    unsigned index = propertyName.asIndex();\n&quot;);
</ins><span class="cx"> 
</span><span class="cx">         # If the item function returns a string then we let the TreatReturnedNullStringAs handle the cases
</span><span class="cx">         # where the index is out of range.
</span><span class="cx">         if ($indexedGetterFunction-&gt;signature-&gt;type eq &quot;DOMString&quot;) {
</span><del>-            push(@getOwnPropertySlotImpl, &quot;    if (optionalIndex) {\n&quot;);
</del><ins>+            push(@getOwnPropertySlotImpl, &quot;    if (index != PropertyName::NotAnIndex) {\n&quot;);
</ins><span class="cx">         } else {
</span><del>-            push(@getOwnPropertySlotImpl, &quot;    if (optionalIndex &amp;&amp; optionalIndex.value() &lt; thisObject-&gt;impl().length()) {\n&quot;);
</del><ins>+            push(@getOwnPropertySlotImpl, &quot;    if (index != PropertyName::NotAnIndex &amp;&amp; index &lt; thisObject-&gt;impl().length()) {\n&quot;);
</ins><span class="cx">         }
</span><del>-        push(@getOwnPropertySlotImpl, &quot;        unsigned index = optionalIndex.value();\n&quot;);
</del><span class="cx">         # Assume that if there's a setter, the index will be writable
</span><span class="cx">         if ($interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;}) {
</span><span class="cx">             push(@getOwnPropertySlotImpl, &quot;        unsigned attributes = ${namespaceMaybe}DontDelete;\n&quot;);
</span><span class="lines">@@ -2457,8 +2456,9 @@
</span><span class="cx">             push(@implContent, &quot;    ${className}* thisObject = jsCast&lt;${className}*&gt;(cell);\n&quot;);
</span><span class="cx">             push(@implContent, &quot;    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\n&quot;);
</span><span class="cx">             if ($interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;}) {
</span><del>-                push(@implContent, &quot;    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {\n&quot;);
-                push(@implContent, &quot;        thisObject-&gt;indexSetter(exec, index.value(), value);\n&quot;);
</del><ins>+                push(@implContent, &quot;    unsigned index = propertyName.asIndex();\n&quot;);
+                push(@implContent, &quot;    if (index != PropertyName::NotAnIndex) {\n&quot;);
+                push(@implContent, &quot;        thisObject-&gt;indexSetter(exec, index, value);\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;        return;\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    }\n&quot;);
</span><span class="cx">             }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSFloat64Arraycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSFloat64Array.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -174,9 +174,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSFloat64Array* thisObject = jsCast&lt;JSFloat64Array*&gt;(object);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; static_cast&lt;Float64Array*&gt;(thisObject-&gt;impl())-&gt;length()) {
-        slot.setValue(thisObject, thisObject-&gt;getByIndex(exec, index.value()));
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex &amp;&amp; index &lt; static_cast&lt;Float64Array*&gt;(thisObject-&gt;impl())-&gt;length()) {
+        slot.setValue(thisObject, thisObject-&gt;getByIndex(exec, index));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     return getStaticValueSlot&lt;JSFloat64Array, Base&gt;(exec, getJSFloat64ArrayTable(exec), thisObject, propertyName, slot);
</span><span class="lines">@@ -186,9 +186,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSFloat64Array* thisObject = jsCast&lt;JSFloat64Array*&gt;(object);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; static_cast&lt;Float64Array*&gt;(thisObject-&gt;impl())-&gt;length()) {
-        descriptor.setDescriptor(thisObject-&gt;getByIndex(exec, index.value()), DontDelete);
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex &amp;&amp; index &lt; static_cast&lt;Float64Array*&gt;(thisObject-&gt;impl())-&gt;length()) {
+        descriptor.setDescriptor(thisObject-&gt;getByIndex(exec, index), DontDelete);
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     return getStaticValueDescriptor&lt;JSFloat64Array, Base&gt;(exec, getJSFloat64ArrayTable(exec), thisObject, propertyName, descriptor);
</span><span class="lines">@@ -215,8 +215,9 @@
</span><span class="cx"> {
</span><span class="cx">     JSFloat64Array* thisObject = jsCast&lt;JSFloat64Array*&gt;(cell);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        thisObject-&gt;indexSetter(exec, index.value(), value);
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
+        thisObject-&gt;indexSetter(exec, index, value);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     Base::put(thisObject, exec, propertyName, value, slot);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -180,10 +180,10 @@
</span><span class="cx">         slot.setCacheableCustom(thisObject, entry-&gt;attributes(), entry-&gt;propertyGetter());
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; thisObject-&gt;impl().length()) {
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex &amp;&amp; index &lt; thisObject-&gt;impl().length()) {
</ins><span class="cx">         unsigned attributes = DontDelete | ReadOnly;
</span><del>-        slot.setValue(thisObject, attributes, toJS(exec, thisObject-&gt;globalObject(), thisObject-&gt;impl().item(index.value())));
</del><ins>+        slot.setValue(thisObject, attributes, toJS(exec, thisObject-&gt;globalObject(), thisObject-&gt;impl().item(index)));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     if (canGetItemsForName(exec, &amp;thisObject-&gt;impl(), propertyName)) {
</span></span></pre></div>
<a id="trunkSourceWebCorebridgeruntime_arraycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bridge/runtime_array.cpp (178755 => 178756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bridge/runtime_array.cpp        2015-01-20 22:21:26 UTC (rev 178755)
+++ trunk/Source/WebCore/bridge/runtime_array.cpp        2015-01-20 22:43:06 UTC (rev 178756)
</span><span class="lines">@@ -89,10 +89,11 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    Optional&lt;uint32_t&gt; index = propertyName.asIndex();
-    if (index &amp;&amp; index.value() &lt; thisObject-&gt;getLength()) {
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index &lt; thisObject-&gt;getLength()) {
+        ASSERT(index != PropertyName::NotAnIndex);
</ins><span class="cx">         slot.setValue(thisObject, DontDelete | DontEnum,
</span><del>-            thisObject-&gt;getConcreteArray()-&gt;valueAt(exec, index.value()));
</del><ins>+            thisObject-&gt;getConcreteArray()-&gt;valueAt(exec, index));
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -119,8 +120,9 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    if (Optional&lt;uint32_t&gt; index = propertyName.asIndex()) {
-        thisObject-&gt;getConcreteArray()-&gt;setValueAt(exec, index.value(), value);
</del><ins>+    unsigned index = propertyName.asIndex();
+    if (index != PropertyName::NotAnIndex) {
+        thisObject-&gt;getConcreteArray()-&gt;setValueAt(exec, index, value);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre>
</div>
</div>

</body>
</html>