<!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>[183629] 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/183629">183629</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2015-04-30 10:36:26 -0700 (Thu, 30 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>DFG Is&lt;Blah&gt; versions of TypeOf should fold based on proven input type
https://bugs.webkit.org/show_bug.cgi?id=144409

Reviewed by Geoffrey Garen.
Source/JavaScriptCore:

        
We were missing some obvious folding opportunities here. I don't know how this affects real
code, but in general, we like to ensure that our constant folding is comprehensive. So this
is more about placating my static analysis OCD than anything else.
        
I added a bunch of speed/correctness tests for this in LayoutTests/js/regress.

* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):

LayoutTests:


* js/regress/is-boolean-fold-expected.txt: Added.
* js/regress/is-boolean-fold-tricky-expected.txt: Added.
* js/regress/is-boolean-fold-tricky.html: Added.
* js/regress/is-boolean-fold.html: Added.
* js/regress/is-function-fold-expected.txt: Added.
* js/regress/is-function-fold-tricky-expected.txt: Added.
* js/regress/is-function-fold-tricky-internal-function-expected.txt: Added.
* js/regress/is-function-fold-tricky-internal-function.html: Added.
* js/regress/is-function-fold-tricky.html: Added.
* js/regress/is-function-fold.html: Added.
* js/regress/is-number-fold-expected.txt: Added.
* js/regress/is-number-fold-tricky-expected.txt: Added.
* js/regress/is-number-fold-tricky.html: Added.
* js/regress/is-number-fold.html: Added.
* js/regress/is-object-or-null-fold-expected.txt: Added.
* js/regress/is-object-or-null-fold-functions-expected.txt: Added.
* js/regress/is-object-or-null-fold-functions.html: Added.
* js/regress/is-object-or-null-fold-less-tricky-expected.txt: Added.
* js/regress/is-object-or-null-fold-less-tricky.html: Added.
* js/regress/is-object-or-null-fold-tricky-expected.txt: Added.
* js/regress/is-object-or-null-fold-tricky.html: Added.
* js/regress/is-object-or-null-fold.html: Added.
* js/regress/is-object-or-null-trickier-function-expected.txt: Added.
* js/regress/is-object-or-null-trickier-function.html: Added.
* js/regress/is-object-or-null-trickier-internal-function-expected.txt: Added.
* js/regress/is-object-or-null-trickier-internal-function.html: Added.
* js/regress/is-object-or-null-tricky-function-expected.txt: Added.
* js/regress/is-object-or-null-tricky-function.html: Added.
* js/regress/is-object-or-null-tricky-internal-function-expected.txt: Added.
* js/regress/is-object-or-null-tricky-internal-function.html: Added.
* js/regress/is-string-fold-expected.txt: Added.
* js/regress/is-string-fold-tricky-expected.txt: Added.
* js/regress/is-string-fold-tricky.html: Added.
* js/regress/is-string-fold.html: Added.
* js/regress/is-undefined-fold-expected.txt: Added.
* js/regress/is-undefined-fold-tricky-expected.txt: Added.
* js/regress/is-undefined-fold-tricky.html: Added.
* js/regress/is-undefined-fold.html: Added.
* js/regress/script-tests/is-boolean-fold-tricky.js: Added.
* js/regress/script-tests/is-boolean-fold.js: Added.
* js/regress/script-tests/is-function-fold-tricky-internal-function.js: Added.
* js/regress/script-tests/is-function-fold-tricky.js: Added.
(func):
(func2):
* js/regress/script-tests/is-function-fold.js: Added.
(value1):
* js/regress/script-tests/is-number-fold-tricky.js: Added.
* js/regress/script-tests/is-number-fold.js: Added.
* js/regress/script-tests/is-object-or-null-fold-functions.js: Added.
(value2):
* js/regress/script-tests/is-object-or-null-fold-less-tricky.js: Added.
* js/regress/script-tests/is-object-or-null-fold-tricky.js: Added.
* js/regress/script-tests/is-object-or-null-fold.js: Added.
* js/regress/script-tests/is-object-or-null-trickier-function.js: Added.
(func):
(func2):
* js/regress/script-tests/is-object-or-null-trickier-internal-function.js: Added.
* js/regress/script-tests/is-object-or-null-tricky-function.js: Added.
(func):
* js/regress/script-tests/is-object-or-null-tricky-internal-function.js: Added.
* js/regress/script-tests/is-string-fold-tricky.js: Added.
* js/regress/script-tests/is-string-fold.js: Added.
* js/regress/script-tests/is-undefined-fold-tricky.js: Added.
* js/regress/script-tests/is-undefined-fold.js: Added.
* js/regress/sink-function-expected.txt: Added.
* js/regress/sink-function.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh">trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsregressisbooleanfoldexpectedtxt">trunk/LayoutTests/js/regress/is-boolean-fold-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisbooleanfoldtrickyexpectedtxt">trunk/LayoutTests/js/regress/is-boolean-fold-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisbooleanfoldtrickyhtml">trunk/LayoutTests/js/regress/is-boolean-fold-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisbooleanfoldhtml">trunk/LayoutTests/js/regress/is-boolean-fold.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisfunctionfoldexpectedtxt">trunk/LayoutTests/js/regress/is-function-fold-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisfunctionfoldtrickyexpectedtxt">trunk/LayoutTests/js/regress/is-function-fold-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisfunctionfoldtrickyinternalfunctionexpectedtxt">trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisfunctionfoldtrickyinternalfunctionhtml">trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisfunctionfoldtrickyhtml">trunk/LayoutTests/js/regress/is-function-fold-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisfunctionfoldhtml">trunk/LayoutTests/js/regress/is-function-fold.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisnumberfoldexpectedtxt">trunk/LayoutTests/js/regress/is-number-fold-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisnumberfoldtrickyexpectedtxt">trunk/LayoutTests/js/regress/is-number-fold-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisnumberfoldtrickyhtml">trunk/LayoutTests/js/regress/is-number-fold-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisnumberfoldhtml">trunk/LayoutTests/js/regress/is-number-fold.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-fold-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldfunctionsexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-fold-functions-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldfunctionshtml">trunk/LayoutTests/js/regress/is-object-or-null-fold-functions.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldlesstrickyexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldlesstrickyhtml">trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldtrickyexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldtrickyhtml">trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornullfoldhtml">trunk/LayoutTests/js/regress/is-object-or-null-fold.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickierfunctionexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-trickier-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickierfunctionhtml">trunk/LayoutTests/js/regress/is-object-or-null-trickier-function.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickierinternalfunctionexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickierinternalfunctionhtml">trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickyfunctionexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-tricky-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickyfunctionhtml">trunk/LayoutTests/js/regress/is-object-or-null-tricky-function.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickyinternalfunctionexpectedtxt">trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisobjectornulltrickyinternalfunctionhtml">trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisstringfoldexpectedtxt">trunk/LayoutTests/js/regress/is-string-fold-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisstringfoldtrickyexpectedtxt">trunk/LayoutTests/js/regress/is-string-fold-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisstringfoldtrickyhtml">trunk/LayoutTests/js/regress/is-string-fold-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisstringfoldhtml">trunk/LayoutTests/js/regress/is-string-fold.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisundefinedfoldexpectedtxt">trunk/LayoutTests/js/regress/is-undefined-fold-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisundefinedfoldtrickyexpectedtxt">trunk/LayoutTests/js/regress/is-undefined-fold-tricky-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressisundefinedfoldtrickyhtml">trunk/LayoutTests/js/regress/is-undefined-fold-tricky.html</a></li>
<li><a href="#trunkLayoutTestsjsregressisundefinedfoldhtml">trunk/LayoutTests/js/regress/is-undefined-fold.html</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisbooleanfoldtrickyjs">trunk/LayoutTests/js/regress/script-tests/is-boolean-fold-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisbooleanfoldjs">trunk/LayoutTests/js/regress/script-tests/is-boolean-fold.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisfunctionfoldtrickyinternalfunctionjs">trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky-internal-function.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisfunctionfoldtrickyjs">trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisfunctionfoldjs">trunk/LayoutTests/js/regress/script-tests/is-function-fold.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisnumberfoldtrickyjs">trunk/LayoutTests/js/regress/script-tests/is-number-fold-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisnumberfoldjs">trunk/LayoutTests/js/regress/script-tests/is-number-fold.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornullfoldfunctionsjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-functions.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornullfoldlesstrickyjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-less-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornullfoldtrickyjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornullfoldjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornulltrickierfunctionjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-function.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornulltrickierinternalfunctionjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-internal-function.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornulltrickyfunctionjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-function.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisobjectornulltrickyinternalfunctionjs">trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-internal-function.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisstringfoldtrickyjs">trunk/LayoutTests/js/regress/script-tests/is-string-fold-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisstringfoldjs">trunk/LayoutTests/js/regress/script-tests/is-string-fold.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisundefinedfoldtrickyjs">trunk/LayoutTests/js/regress/script-tests/is-undefined-fold-tricky.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsisundefinedfoldjs">trunk/LayoutTests/js/regress/script-tests/is-undefined-fold.js</a></li>
<li><a href="#trunkLayoutTestsjsregresssinkfunctionexpectedtxt">trunk/LayoutTests/js/regress/sink-function-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregresssinkfunctionhtml">trunk/LayoutTests/js/regress/sink-function.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (183628 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-04-30 17:21:55 UTC (rev 183628)
+++ trunk/LayoutTests/ChangeLog        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -1,3 +1,77 @@
</span><ins>+2015-04-29  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        DFG Is&lt;Blah&gt; versions of TypeOf should fold based on proven input type
+        https://bugs.webkit.org/show_bug.cgi?id=144409
+
+        Reviewed by Geoffrey Garen.
+
+        * js/regress/is-boolean-fold-expected.txt: Added.
+        * js/regress/is-boolean-fold-tricky-expected.txt: Added.
+        * js/regress/is-boolean-fold-tricky.html: Added.
+        * js/regress/is-boolean-fold.html: Added.
+        * js/regress/is-function-fold-expected.txt: Added.
+        * js/regress/is-function-fold-tricky-expected.txt: Added.
+        * js/regress/is-function-fold-tricky-internal-function-expected.txt: Added.
+        * js/regress/is-function-fold-tricky-internal-function.html: Added.
+        * js/regress/is-function-fold-tricky.html: Added.
+        * js/regress/is-function-fold.html: Added.
+        * js/regress/is-number-fold-expected.txt: Added.
+        * js/regress/is-number-fold-tricky-expected.txt: Added.
+        * js/regress/is-number-fold-tricky.html: Added.
+        * js/regress/is-number-fold.html: Added.
+        * js/regress/is-object-or-null-fold-expected.txt: Added.
+        * js/regress/is-object-or-null-fold-functions-expected.txt: Added.
+        * js/regress/is-object-or-null-fold-functions.html: Added.
+        * js/regress/is-object-or-null-fold-less-tricky-expected.txt: Added.
+        * js/regress/is-object-or-null-fold-less-tricky.html: Added.
+        * js/regress/is-object-or-null-fold-tricky-expected.txt: Added.
+        * js/regress/is-object-or-null-fold-tricky.html: Added.
+        * js/regress/is-object-or-null-fold.html: Added.
+        * js/regress/is-object-or-null-trickier-function-expected.txt: Added.
+        * js/regress/is-object-or-null-trickier-function.html: Added.
+        * js/regress/is-object-or-null-trickier-internal-function-expected.txt: Added.
+        * js/regress/is-object-or-null-trickier-internal-function.html: Added.
+        * js/regress/is-object-or-null-tricky-function-expected.txt: Added.
+        * js/regress/is-object-or-null-tricky-function.html: Added.
+        * js/regress/is-object-or-null-tricky-internal-function-expected.txt: Added.
+        * js/regress/is-object-or-null-tricky-internal-function.html: Added.
+        * js/regress/is-string-fold-expected.txt: Added.
+        * js/regress/is-string-fold-tricky-expected.txt: Added.
+        * js/regress/is-string-fold-tricky.html: Added.
+        * js/regress/is-string-fold.html: Added.
+        * js/regress/is-undefined-fold-expected.txt: Added.
+        * js/regress/is-undefined-fold-tricky-expected.txt: Added.
+        * js/regress/is-undefined-fold-tricky.html: Added.
+        * js/regress/is-undefined-fold.html: Added.
+        * js/regress/script-tests/is-boolean-fold-tricky.js: Added.
+        * js/regress/script-tests/is-boolean-fold.js: Added.
+        * js/regress/script-tests/is-function-fold-tricky-internal-function.js: Added.
+        * js/regress/script-tests/is-function-fold-tricky.js: Added.
+        (func):
+        (func2):
+        * js/regress/script-tests/is-function-fold.js: Added.
+        (value1):
+        * js/regress/script-tests/is-number-fold-tricky.js: Added.
+        * js/regress/script-tests/is-number-fold.js: Added.
+        * js/regress/script-tests/is-object-or-null-fold-functions.js: Added.
+        (value2):
+        * js/regress/script-tests/is-object-or-null-fold-less-tricky.js: Added.
+        * js/regress/script-tests/is-object-or-null-fold-tricky.js: Added.
+        * js/regress/script-tests/is-object-or-null-fold.js: Added.
+        * js/regress/script-tests/is-object-or-null-trickier-function.js: Added.
+        (func):
+        (func2):
+        * js/regress/script-tests/is-object-or-null-trickier-internal-function.js: Added.
+        * js/regress/script-tests/is-object-or-null-tricky-function.js: Added.
+        (func):
+        * js/regress/script-tests/is-object-or-null-tricky-internal-function.js: Added.
+        * js/regress/script-tests/is-string-fold-tricky.js: Added.
+        * js/regress/script-tests/is-string-fold.js: Added.
+        * js/regress/script-tests/is-undefined-fold-tricky.js: Added.
+        * js/regress/script-tests/is-undefined-fold.js: Added.
+        * js/regress/sink-function-expected.txt: Added.
+        * js/regress/sink-function.html: Added.
+
</ins><span class="cx"> 2015-04-30  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Mac] Expand test infrastructure to support scrolling tests (Part 3)
</span></span></pre></div>
<a id="trunkLayoutTestsjsregressisbooleanfoldexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-boolean-fold-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-boolean-fold-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-boolean-fold-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-boolean-fold
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisbooleanfoldtrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-boolean-fold-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-boolean-fold-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-boolean-fold-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-boolean-fold-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisbooleanfoldtrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-boolean-fold-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-boolean-fold-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-boolean-fold-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-boolean-fold-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisbooleanfoldhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-boolean-fold.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-boolean-fold.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-boolean-fold.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-boolean-fold.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisfunctionfoldexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-function-fold-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-function-fold-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-function-fold-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-function-fold
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisfunctionfoldtrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-function-fold-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-function-fold-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-function-fold-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-function-fold-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisfunctionfoldtrickyinternalfunctionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-function-fold-tricky-internal-function
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisfunctionfoldtrickyinternalfunctionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-function-fold-tricky-internal-function.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-function-fold-tricky-internal-function.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisfunctionfoldtrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-function-fold-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-function-fold-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-function-fold-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-function-fold-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisfunctionfoldhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-function-fold.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-function-fold.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-function-fold.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-function-fold.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisnumberfoldexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-number-fold-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-number-fold-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-number-fold-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-number-fold
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisnumberfoldtrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-number-fold-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-number-fold-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-number-fold-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-number-fold-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisnumberfoldtrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-number-fold-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-number-fold-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-number-fold-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-number-fold-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisnumberfoldhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-number-fold.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-number-fold.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-number-fold.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-number-fold.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-fold
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldfunctionsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-functions-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-functions-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-functions-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-fold-functions
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldfunctionshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-functions.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-functions.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-functions.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-fold-functions.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldlesstrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-fold-less-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldlesstrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-less-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-fold-less-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldtrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-fold-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldtrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-fold-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornullfoldhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-fold.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-fold.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-fold.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-fold.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickierfunctionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-trickier-function-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-trickier-function-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-trickier-function-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-trickier-function
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickierfunctionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-trickier-function.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-trickier-function.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-trickier-function.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-trickier-function.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickierinternalfunctionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-trickier-internal-function
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickierinternalfunctionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-trickier-internal-function.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-trickier-internal-function.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickyfunctionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-tricky-function-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-tricky-function-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-tricky-function-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-tricky-function
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickyfunctionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-tricky-function.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-tricky-function.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-tricky-function.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-tricky-function.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickyinternalfunctionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-object-or-null-tricky-internal-function
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisobjectornulltrickyinternalfunctionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-object-or-null-tricky-internal-function.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-object-or-null-tricky-internal-function.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisstringfoldexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-string-fold-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-string-fold-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-string-fold-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-string-fold
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisstringfoldtrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-string-fold-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-string-fold-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-string-fold-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-string-fold-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisstringfoldtrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-string-fold-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-string-fold-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-string-fold-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-string-fold-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisstringfoldhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-string-fold.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-string-fold.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-string-fold.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-string-fold.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisundefinedfoldexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-undefined-fold-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-undefined-fold-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-undefined-fold-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-undefined-fold
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisundefinedfoldtrickyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-undefined-fold-tricky-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-undefined-fold-tricky-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-undefined-fold-tricky-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/is-undefined-fold-tricky
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisundefinedfoldtrickyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-undefined-fold-tricky.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-undefined-fold-tricky.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-undefined-fold-tricky.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-undefined-fold-tricky.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressisundefinedfoldhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/is-undefined-fold.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/is-undefined-fold.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/is-undefined-fold.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/is-undefined-fold.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisbooleanfoldtrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-boolean-fold-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-boolean-fold-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-boolean-fold-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+var object = {};
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? true : false;
+        var value2 = (i &amp; 1) ? &quot;hello&quot; : object;
+        result += (typeof value1 == &quot;boolean&quot;);
+        result += (typeof value2 == &quot;boolean&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisbooleanfoldjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-boolean-fold.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-boolean-fold.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-boolean-fold.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = true;
+var value2 = &quot;hello&quot;;
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;boolean&quot;);
+        result += (typeof value2 == &quot;boolean&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisfunctionfoldtrickyinternalfunctionjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky-internal-function.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky-internal-function.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky-internal-function.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+var object = {};
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? Map : Set;
+        var value2 = (i &amp; 1) ? object : &quot;hello&quot;;
+        result += (typeof value1 == &quot;function&quot;);
+        result += (typeof value2 == &quot;function&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisfunctionfoldtrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-function-fold-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+var object = {};
+var func = function() { };
+var func2 = function() { return 42; };
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? func : func2;
+        var value2 = (i &amp; 1) ? object : &quot;hello&quot;;
+        result += (typeof value1 == &quot;function&quot;);
+        result += (typeof value2 == &quot;function&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisfunctionfoldjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-function-fold.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-function-fold.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-function-fold.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = function() { };
+var value2 = 42;
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;function&quot;);
+        result += (typeof value2 == &quot;function&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisnumberfoldtrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-number-fold-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-number-fold-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-number-fold-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+var object = {};
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? 42.5 : 42;
+        var value2 = (i &amp; 1) ? &quot;hello&quot; : object;
+        result += (typeof value1 == &quot;number&quot;);
+        result += (typeof value2 == &quot;number&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisnumberfoldjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-number-fold.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-number-fold.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-number-fold.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = 42;
+var value2 = &quot;hello&quot;;
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;number&quot;);
+        result += (typeof value2 == &quot;number&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornullfoldfunctionsjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-functions.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-functions.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-functions.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = {};
+var value2 = function() { };
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornullfoldlesstrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-less-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-less-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-less-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+var object = {};
+var array = [];
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? array : object;
+        var value2 = (i &amp; 1) ? 42 : &quot;hello&quot;;
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornullfoldtrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+var object = {};
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? null : object;
+        var value2 = (i &amp; 1) ? 42 : &quot;hello&quot;;
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornullfoldjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-fold.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = {};
+var value2 = 42;
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornulltrickierfunctionjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-function.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-function.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-function.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+var object = {};
+var array = [];
+var func = function() { };
+var func2 = function() { return 32; };
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? array : object;
+        var value2 = (i &amp; 1) ? func : func2;
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornulltrickierinternalfunctionjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-internal-function.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-internal-function.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-trickier-internal-function.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+var object = {};
+var array = [];
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? array : object;
+        var value2 = (i &amp; 1) ? Map : Set;
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornulltrickyfunctionjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-function.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-function.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-function.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+var object = {};
+var array = [];
+var func = function() { };
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? array : object;
+        var value2 = (i &amp; 1) ? func : &quot;hello&quot;;
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisobjectornulltrickyinternalfunctionjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-internal-function.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-internal-function.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-object-or-null-tricky-internal-function.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+var object = {};
+var array = [];
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? array : object;
+        var value2 = (i &amp; 1) ? Map : &quot;hello&quot;;
+        result += (typeof value1 == &quot;object&quot;);
+        result += (typeof value2 == &quot;object&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisstringfoldtrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-string-fold-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-string-fold-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-string-fold-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+var object = {};
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = (i &amp; 1) ? &quot;hello&quot; : &quot;world&quot;;
+        var value2 = (i &amp; 1) ? 42 : object;
+        result += (typeof value1 == &quot;string&quot;);
+        result += (typeof value2 == &quot;string&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisstringfoldjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-string-fold.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-string-fold.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-string-fold.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = &quot;hello&quot;;
+var value2 = 42;
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;string&quot;);
+        result += (typeof value2 == &quot;string&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisundefinedfoldtrickyjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-undefined-fold-tricky.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-undefined-fold-tricky.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-undefined-fold-tricky.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+var object = {};
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        var value1 = void 0;
+        var value2 = (i &amp; 1) ? &quot;hello&quot; : object;
+        result += (typeof value1 == &quot;undefined&quot;);
+        result += (typeof value2 == &quot;undefined&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsisundefinedfoldjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/script-tests/is-undefined-fold.js (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/is-undefined-fold.js                                (rev 0)
+++ trunk/LayoutTests/js/regress/script-tests/is-undefined-fold.js        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+var value1 = void 0;
+var value2 = &quot;hello&quot;;
+(function() {
+    var result = 0;
+    for (var i = 0; i &lt; 1000000; ++i) {
+        result += (typeof value1 == &quot;undefined&quot;);
+        result += (typeof value2 == &quot;undefined&quot;) &lt;&lt; 1;
+    }
+    if (result != 1000000)
+        throw &quot;Error: bad result: &quot; + result;
+})();
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregresssinkfunctionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/sink-function-expected.txt (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/sink-function-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/regress/sink-function-expected.txt        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/sink-function
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsregresssinkfunctionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/regress/sink-function.html (0 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/sink-function.html                                (rev 0)
+++ trunk/LayoutTests/js/regress/sink-function.html        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&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;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/sink-function.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.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;
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (183628 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-04-30 17:21:55 UTC (rev 183628)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2015-04-29  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        DFG Is&lt;Blah&gt; versions of TypeOf should fold based on proven input type
+        https://bugs.webkit.org/show_bug.cgi?id=144409
+
+        Reviewed by Geoffrey Garen.
+        
+        We were missing some obvious folding opportunities here. I don't know how this affects real
+        code, but in general, we like to ensure that our constant folding is comprehensive. So this
+        is more about placating my static analysis OCD than anything else.
+        
+        I added a bunch of speed/correctness tests for this in LayoutTests/js/regress.
+
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
+
</ins><span class="cx"> 2015-04-30  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Use the default hash value for Symbolized StringImpl
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (183628 => 183629)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2015-04-30 17:21:55 UTC (rev 183628)
+++ trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2015-04-30 17:36:26 UTC (rev 183629)
</span><span class="lines">@@ -834,35 +834,58 @@
</span><span class="cx">     case IsObject:
</span><span class="cx">     case IsObjectOrNull:
</span><span class="cx">     case IsFunction: {
</span><del>-        JSValue child = forNode(node-&gt;child1()).value();
-        if (child) {
</del><ins>+        AbstractValue child = forNode(node-&gt;child1());
+        if (child.value()) {
</ins><span class="cx">             bool constantWasSet = true;
</span><span class="cx">             switch (node-&gt;op()) {
</span><span class="cx">             case IsUndefined:
</span><span class="cx">                 setConstant(node, jsBoolean(
</span><del>-                    child.isCell()
-                    ? child.asCell()-&gt;structure()-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic))
-                    : child.isUndefined()));
</del><ins>+                    child.value().isCell()
+                    ? child.value().asCell()-&gt;structure()-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic))
+                    : child.value().isUndefined()));
</ins><span class="cx">                 break;
</span><span class="cx">             case IsBoolean:
</span><del>-                setConstant(node, jsBoolean(child.isBoolean()));
</del><ins>+                setConstant(node, jsBoolean(child.value().isBoolean()));
</ins><span class="cx">                 break;
</span><span class="cx">             case IsNumber:
</span><del>-                setConstant(node, jsBoolean(child.isNumber()));
</del><ins>+                setConstant(node, jsBoolean(child.value().isNumber()));
</ins><span class="cx">                 break;
</span><span class="cx">             case IsString:
</span><del>-                setConstant(node, jsBoolean(isJSString(child)));
</del><ins>+                setConstant(node, jsBoolean(isJSString(child.value())));
</ins><span class="cx">                 break;
</span><span class="cx">             case IsObject:
</span><del>-                setConstant(node, jsBoolean(child.isObject()));
</del><ins>+                setConstant(node, jsBoolean(child.value().isObject()));
</ins><span class="cx">                 break;
</span><span class="cx">             case IsObjectOrNull:
</span><del>-                if (child.isNull() || !child.isObject()) {
-                    setConstant(node, jsBoolean(child.isNull()));
-                    break;
-                }
-                constantWasSet = false;
</del><ins>+                if (child.value().isObject()) {
+                    JSObject* object = asObject(child.value());
+                    if (object-&gt;type() == JSFunctionType)
+                        setConstant(node, jsBoolean(false));
+                    else if (!(object-&gt;inlineTypeFlags() &amp; TypeOfShouldCallGetCallData))
+                        setConstant(node, jsBoolean(!child.value().asCell()-&gt;structure()-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic))));
+                    else {
+                        // FIXME: This could just call getCallData.
+                        // https://bugs.webkit.org/show_bug.cgi?id=144457
+                        constantWasSet = false;
+                    }
+                } else
+                    setConstant(node, jsBoolean(child.value().isNull()));
</ins><span class="cx">                 break;
</span><ins>+            case IsFunction:
+                if (child.value().isObject()) {
+                    JSObject* object = asObject(child.value());
+                    if (object-&gt;type() == JSFunctionType)
+                        setConstant(node, jsBoolean(true));
+                    else if (!(object-&gt;inlineTypeFlags() &amp; TypeOfShouldCallGetCallData))
+                        setConstant(node, jsBoolean(false));
+                    else {
+                        // FIXME: This could just call getCallData.
+                        // https://bugs.webkit.org/show_bug.cgi?id=144457
+                        constantWasSet = false;
+                    }
+                } else
+                    setConstant(node, jsBoolean(false));
+                break;
</ins><span class="cx">             default:
</span><span class="cx">                 constantWasSet = false;
</span><span class="cx">                 break;
</span><span class="lines">@@ -870,7 +893,112 @@
</span><span class="cx">             if (constantWasSet)
</span><span class="cx">                 break;
</span><span class="cx">         }
</span><del>-
</del><ins>+        
+        bool constantWasSet = false;
+        switch (node-&gt;op()) {
+        case IsUndefined:
+            // FIXME: Use the masquerades-as-undefined watchpoint thingy.
+            // https://bugs.webkit.org/show_bug.cgi?id=144456
+            
+            if (!(child.m_type &amp; (SpecOther | SpecObjectOther))) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            
+            break;
+        case IsBoolean:
+            if (!(child.m_type &amp; ~SpecBoolean)) {
+                setConstant(node, jsBoolean(true));
+                constantWasSet = true;
+                break;
+            }
+            
+            if (!(child.m_type &amp; SpecBoolean)) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            
+            break;
+        case IsNumber:
+            if (!(child.m_type &amp; ~SpecFullNumber)) {
+                setConstant(node, jsBoolean(true));
+                constantWasSet = true;
+                break;
+            }
+            
+            if (!(child.m_type &amp; SpecFullNumber)) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            
+            break;
+        case IsString:
+            if (!(child.m_type &amp; ~SpecString)) {
+                setConstant(node, jsBoolean(true));
+                constantWasSet = true;
+                break;
+            }
+            
+            if (!(child.m_type &amp; SpecString)) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            
+            break;
+        case IsObject:
+            if (!(child.m_type &amp; ~SpecObject)) {
+                setConstant(node, jsBoolean(true));
+                constantWasSet = true;
+                break;
+            }
+            
+            if (!(child.m_type &amp; SpecObject)) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            
+            break;
+        case IsObjectOrNull:
+            // FIXME: Use the masquerades-as-undefined watchpoint thingy.
+            // https://bugs.webkit.org/show_bug.cgi?id=144456
+            
+            if (!(child.m_type &amp; ~(SpecObject - SpecObjectOther - SpecFunction))) {
+                setConstant(node, jsBoolean(true));
+                constantWasSet = true;
+                break;
+            }
+            
+            if (!(child.m_type &amp; (SpecObject - SpecFunction))) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            
+            break;
+        case IsFunction:
+            if (!(child.m_type &amp; ~SpecFunction)) {
+                setConstant(node, jsBoolean(true));
+                constantWasSet = true;
+                break;
+            }
+            
+            if (!(child.m_type &amp; (SpecFunction | SpecObjectOther))) {
+                setConstant(node, jsBoolean(false));
+                constantWasSet = true;
+                break;
+            }
+            break;
+        default:
+            break;
+        }
+        if (constantWasSet)
+            break;
+        
</ins><span class="cx">         forNode(node).setType(SpecBoolean);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -894,8 +1022,10 @@
</span><span class="cx">             setConstant(node, *m_graph.freeze(vm-&gt;smallStrings.stringString()));
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        
-        if (isFinalObjectSpeculation(abstractChild.m_type) || isArraySpeculation(abstractChild.m_type) || isDirectArgumentsSpeculation(abstractChild.m_type) || isScopedArgumentsSpeculation(abstractChild.m_type)) {
</del><ins>+
+        // FIXME: We could use the masquerades-as-undefined watchpoint here.
+        // https://bugs.webkit.org/show_bug.cgi?id=144456
+        if (!(abstractChild.m_type &amp; ~(SpecObject - SpecObjectOther))) {
</ins><span class="cx">             setConstant(node, *m_graph.freeze(vm-&gt;smallStrings.objectString()));
</span><span class="cx">             break;
</span><span class="cx">         }
</span></span></pre>
</div>
</div>

</body>
</html>