<!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>[195862] trunk/Source/JavaScriptCore</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/195862">195862</a></dd>
<dt>Author</dt> <dd>sbarati@apple.com</dd>
<dt>Date</dt> <dd>2016-01-29 16:01:48 -0800 (Fri, 29 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove our notion of having a single activation register
https://bugs.webkit.org/show_bug.cgi?id=153673

Reviewed by Filip Pizlo.

We have many functions lurking around where we think a function 
might only have one activation register. This is clearly wrong
now that ES6 has block scoping. This patch removes this false notion.

* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpBytecode):
(JSC::CodeBlock::CodeBlock):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::scopeRegister):
(JSC::CodeBlock::codeType):
(JSC::CodeBlock::setActivationRegister): Deleted.
(JSC::CodeBlock::activationRegister): Deleted.
(JSC::CodeBlock::uncheckedActivationRegister): Deleted.
(JSC::CodeBlock::needsActivation): Deleted.
* bytecode/ExecutableInfo.h:
(JSC::ExecutableInfo::ExecutableInfo):
(JSC::ExecutableInfo::usesEval):
(JSC::ExecutableInfo::isStrictMode):
(JSC::ExecutableInfo::isConstructor):
(JSC::ExecutableInfo::isClassContext):
(JSC::ExecutableInfo::needsActivation): Deleted.
* bytecode/UnlinkedCodeBlock.cpp:
(JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
* bytecode/UnlinkedCodeBlock.h:
(JSC::UnlinkedCodeBlock::isArrowFunctionContext):
(JSC::UnlinkedCodeBlock::isClassContext):
(JSC::UnlinkedCodeBlock::setThisRegister):
(JSC::UnlinkedCodeBlock::setScopeRegister):
(JSC::UnlinkedCodeBlock::usesGlobalObject):
(JSC::UnlinkedCodeBlock::setGlobalObjectRegister):
(JSC::UnlinkedCodeBlock::thisRegister):
(JSC::UnlinkedCodeBlock::scopeRegister):
(JSC::UnlinkedCodeBlock::addPropertyAccessInstruction):
(JSC::UnlinkedCodeBlock::needsFullScopeChain): Deleted.
(JSC::UnlinkedCodeBlock::setActivationRegister): Deleted.
(JSC::UnlinkedCodeBlock::activationRegister): Deleted.
(JSC::UnlinkedCodeBlock::hasActivationRegister): Deleted.
* bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::generateUnlinkedFunctionCodeBlock):
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::initializeVarLexicalEnvironment):
* bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::destinationForAssignResult):
(JSC::BytecodeGenerator::leftHandSideNeedsCopy):
(JSC::BytecodeGenerator::emitNodeForLeftHandSide):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::inliningCost):
(JSC::DFG::ByteCodeParser::parseCodeBlock):
* dfg/DFGGraph.h:
(JSC::DFG::Graph::hasExitSite):
(JSC::DFG::Graph::activationRegister): Deleted.
(JSC::DFG::Graph::uncheckedActivationRegister): Deleted.
(JSC::DFG::Graph::machineActivationRegister): Deleted.
(JSC::DFG::Graph::uncheckedMachineActivationRegister): Deleted.
* dfg/DFGStackLayoutPhase.cpp:
(JSC::DFG::StackLayoutPhase::run):
* interpreter/CallFrame.cpp:
(JSC::CallFrame::callSiteIndex):
(JSC::CallFrame::stack):
(JSC::CallFrame::callerFrame):
(JSC::CallFrame::friendlyFunctionName):
(JSC::CallFrame::hasActivation): Deleted.
(JSC::CallFrame::uncheckedActivation): Deleted.
(JSC::CallFrame::lexicalEnvironment): Deleted.
(JSC::CallFrame::lexicalEnvironmentOrNullptr): Deleted.
(JSC::CallFrame::setActivation): Deleted.
* interpreter/CallFrame.h:
(JSC::ExecState::scope):
(JSC::ExecState::setCallerFrame):
(JSC::ExecState::setScope):
(JSC::ExecState::init):
* interpreter/Register.h:
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* runtime/Executable.h:
(JSC::ScriptExecutable::usesEval):
(JSC::ScriptExecutable::usesArguments):
(JSC::ScriptExecutable::isArrowFunctionContext):
(JSC::ScriptExecutable::isStrictMode):
(JSC::ScriptExecutable::derivedContextType):
(JSC::ScriptExecutable::needsActivation): Deleted.
* runtime/JSLexicalEnvironment.h:
(JSC::asActivation):
(JSC::Register::lexicalEnvironment): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockh">trunk/Source/JavaScriptCore/bytecode/CodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeExecutableInfoh">trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutablecpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp">trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGGraphh">trunk/Source/JavaScriptCore/dfg/DFGGraph.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGStackLayoutPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGStackLayoutPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFramecpp">trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFrameh">trunk/Source/JavaScriptCore/interpreter/CallFrame.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterRegisterh">trunk/Source/JavaScriptCore/interpreter/Register.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeExecutableh">trunk/Source/JavaScriptCore/runtime/Executable.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSLexicalEnvironmenth">trunk/Source/JavaScriptCore/runtime/JSLexicalEnvironment.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -1,3 +1,96 @@
</span><ins>+2016-01-29  Saam barati  &lt;sbarati@apple.com&gt;
+
+        Remove our notion of having a single activation register
+        https://bugs.webkit.org/show_bug.cgi?id=153673
+
+        Reviewed by Filip Pizlo.
+
+        We have many functions lurking around where we think a function 
+        might only have one activation register. This is clearly wrong
+        now that ES6 has block scoping. This patch removes this false notion.
+
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::dumpBytecode):
+        (JSC::CodeBlock::CodeBlock):
+        * bytecode/CodeBlock.h:
+        (JSC::CodeBlock::scopeRegister):
+        (JSC::CodeBlock::codeType):
+        (JSC::CodeBlock::setActivationRegister): Deleted.
+        (JSC::CodeBlock::activationRegister): Deleted.
+        (JSC::CodeBlock::uncheckedActivationRegister): Deleted.
+        (JSC::CodeBlock::needsActivation): Deleted.
+        * bytecode/ExecutableInfo.h:
+        (JSC::ExecutableInfo::ExecutableInfo):
+        (JSC::ExecutableInfo::usesEval):
+        (JSC::ExecutableInfo::isStrictMode):
+        (JSC::ExecutableInfo::isConstructor):
+        (JSC::ExecutableInfo::isClassContext):
+        (JSC::ExecutableInfo::needsActivation): Deleted.
+        * bytecode/UnlinkedCodeBlock.cpp:
+        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+        * bytecode/UnlinkedCodeBlock.h:
+        (JSC::UnlinkedCodeBlock::isArrowFunctionContext):
+        (JSC::UnlinkedCodeBlock::isClassContext):
+        (JSC::UnlinkedCodeBlock::setThisRegister):
+        (JSC::UnlinkedCodeBlock::setScopeRegister):
+        (JSC::UnlinkedCodeBlock::usesGlobalObject):
+        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister):
+        (JSC::UnlinkedCodeBlock::thisRegister):
+        (JSC::UnlinkedCodeBlock::scopeRegister):
+        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction):
+        (JSC::UnlinkedCodeBlock::needsFullScopeChain): Deleted.
+        (JSC::UnlinkedCodeBlock::setActivationRegister): Deleted.
+        (JSC::UnlinkedCodeBlock::activationRegister): Deleted.
+        (JSC::UnlinkedCodeBlock::hasActivationRegister): Deleted.
+        * bytecode/UnlinkedFunctionExecutable.cpp:
+        (JSC::generateUnlinkedFunctionCodeBlock):
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::BytecodeGenerator):
+        (JSC::BytecodeGenerator::initializeVarLexicalEnvironment):
+        * bytecompiler/BytecodeGenerator.h:
+        (JSC::BytecodeGenerator::destinationForAssignResult):
+        (JSC::BytecodeGenerator::leftHandSideNeedsCopy):
+        (JSC::BytecodeGenerator::emitNodeForLeftHandSide):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::inliningCost):
+        (JSC::DFG::ByteCodeParser::parseCodeBlock):
+        * dfg/DFGGraph.h:
+        (JSC::DFG::Graph::hasExitSite):
+        (JSC::DFG::Graph::activationRegister): Deleted.
+        (JSC::DFG::Graph::uncheckedActivationRegister): Deleted.
+        (JSC::DFG::Graph::machineActivationRegister): Deleted.
+        (JSC::DFG::Graph::uncheckedMachineActivationRegister): Deleted.
+        * dfg/DFGStackLayoutPhase.cpp:
+        (JSC::DFG::StackLayoutPhase::run):
+        * interpreter/CallFrame.cpp:
+        (JSC::CallFrame::callSiteIndex):
+        (JSC::CallFrame::stack):
+        (JSC::CallFrame::callerFrame):
+        (JSC::CallFrame::friendlyFunctionName):
+        (JSC::CallFrame::hasActivation): Deleted.
+        (JSC::CallFrame::uncheckedActivation): Deleted.
+        (JSC::CallFrame::lexicalEnvironment): Deleted.
+        (JSC::CallFrame::lexicalEnvironmentOrNullptr): Deleted.
+        (JSC::CallFrame::setActivation): Deleted.
+        * interpreter/CallFrame.h:
+        (JSC::ExecState::scope):
+        (JSC::ExecState::setCallerFrame):
+        (JSC::ExecState::setScope):
+        (JSC::ExecState::init):
+        * interpreter/Register.h:
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+        * runtime/Executable.h:
+        (JSC::ScriptExecutable::usesEval):
+        (JSC::ScriptExecutable::usesArguments):
+        (JSC::ScriptExecutable::isArrowFunctionContext):
+        (JSC::ScriptExecutable::isStrictMode):
+        (JSC::ScriptExecutable::derivedContextType):
+        (JSC::ScriptExecutable::needsActivation): Deleted.
+        * runtime/JSLexicalEnvironment.h:
+        (JSC::asActivation):
+        (JSC::Register::lexicalEnvironment): Deleted.
+
</ins><span class="cx"> 2016-01-29  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Air:fixObviousSpills should handle floats and doubles
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -586,8 +586,6 @@
</span><span class="cx">         static_cast&lt;unsigned long&gt;(instructions().size()),
</span><span class="cx">         static_cast&lt;unsigned long&gt;(instructions().size() * sizeof(Instruction)),
</span><span class="cx">         m_numParameters, m_numCalleeLocals, m_numVars);
</span><del>-    if (needsActivation() &amp;&amp; codeType() == FunctionCode)
-        out.printf(&quot;; lexical environment in r%d&quot;, activationRegister().offset());
</del><span class="cx">     out.printf(&quot;\n&quot;);
</span><span class="cx">     
</span><span class="cx">     StubInfoMap stubInfos;
</span><span class="lines">@@ -1750,7 +1748,6 @@
</span><span class="cx">     , m_hasBeenCompiledWithFTL(false)
</span><span class="cx">     , m_isConstructor(other.m_isConstructor)
</span><span class="cx">     , m_isStrictMode(other.m_isStrictMode)
</span><del>-    , m_needsActivation(other.m_needsActivation)
</del><span class="cx">     , m_codeType(other.m_codeType)
</span><span class="cx">     , m_unlinkedCode(*other.m_vm, this, other.m_unlinkedCode.get())
</span><span class="cx">     , m_hasDebuggerStatement(false)
</span><span class="lines">@@ -1761,7 +1758,6 @@
</span><span class="cx">     , m_instructions(other.m_instructions)
</span><span class="cx">     , m_thisRegister(other.m_thisRegister)
</span><span class="cx">     , m_scopeRegister(other.m_scopeRegister)
</span><del>-    , m_lexicalEnvironmentRegister(other.m_lexicalEnvironmentRegister)
</del><span class="cx">     , m_hash(other.m_hash)
</span><span class="cx">     , m_source(other.m_source)
</span><span class="cx">     , m_sourceOffset(other.m_sourceOffset)
</span><span class="lines">@@ -1817,7 +1813,6 @@
</span><span class="cx">     , m_hasBeenCompiledWithFTL(false)
</span><span class="cx">     , m_isConstructor(unlinkedCodeBlock-&gt;isConstructor())
</span><span class="cx">     , m_isStrictMode(unlinkedCodeBlock-&gt;isStrictMode())
</span><del>-    , m_needsActivation(unlinkedCodeBlock-&gt;hasActivationRegister() &amp;&amp; unlinkedCodeBlock-&gt;codeType() == FunctionCode)
</del><span class="cx">     , m_codeType(unlinkedCodeBlock-&gt;codeType())
</span><span class="cx">     , m_unlinkedCode(m_globalObject-&gt;vm(), this, unlinkedCodeBlock)
</span><span class="cx">     , m_hasDebuggerStatement(false)
</span><span class="lines">@@ -1827,7 +1822,6 @@
</span><span class="cx">     , m_vm(unlinkedCodeBlock-&gt;vm())
</span><span class="cx">     , m_thisRegister(unlinkedCodeBlock-&gt;thisRegister())
</span><span class="cx">     , m_scopeRegister(unlinkedCodeBlock-&gt;scopeRegister())
</span><del>-    , m_lexicalEnvironmentRegister(unlinkedCodeBlock-&gt;activationRegister())
</del><span class="cx">     , m_source(sourceProvider)
</span><span class="cx">     , m_sourceOffset(sourceOffset)
</span><span class="cx">     , m_firstLineColumnOffset(firstLineColumnOffset)
</span><span class="lines">@@ -2334,7 +2328,6 @@
</span><span class="cx">     , m_hasBeenCompiledWithFTL(false)
</span><span class="cx">     , m_isConstructor(false)
</span><span class="cx">     , m_isStrictMode(false)
</span><del>-    , m_needsActivation(false)
</del><span class="cx">     , m_codeType(FunctionCode)
</span><span class="cx">     , m_hasDebuggerStatement(false)
</span><span class="cx">     , m_steppingMode(SteppingModeDisabled)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -351,28 +351,6 @@
</span><span class="cx">     {
</span><span class="cx">         return m_scopeRegister;
</span><span class="cx">     }
</span><del>-
-    void setActivationRegister(VirtualRegister activationRegister)
-    {
-        m_lexicalEnvironmentRegister = activationRegister;
-    }
-
-    VirtualRegister activationRegister() const
-    {
-        ASSERT(m_lexicalEnvironmentRegister.isValid());
-        return m_lexicalEnvironmentRegister;
-    }
-
-    VirtualRegister uncheckedActivationRegister()
-    {
-        return m_lexicalEnvironmentRegister;
-    }
-
-    bool needsActivation() const
-    {
-        ASSERT(m_lexicalEnvironmentRegister.isValid() == m_needsActivation);
-        return m_needsActivation;
-    }
</del><span class="cx">     
</span><span class="cx">     CodeType codeType() const
</span><span class="cx">     {
</span><span class="lines">@@ -898,7 +876,6 @@
</span><span class="cx">     bool m_hasBeenCompiledWithFTL : 1;
</span><span class="cx">     bool m_isConstructor : 1;
</span><span class="cx">     bool m_isStrictMode : 1;
</span><del>-    bool m_needsActivation : 1;
</del><span class="cx">     unsigned m_codeType : 2; // CodeType
</span><span class="cx"> 
</span><span class="cx">     // Internal methods for use by validation code. It would be private if it wasn't
</span><span class="lines">@@ -1039,7 +1016,6 @@
</span><span class="cx">     RefCountedArray&lt;Instruction&gt; m_instructions;
</span><span class="cx">     VirtualRegister m_thisRegister;
</span><span class="cx">     VirtualRegister m_scopeRegister;
</span><del>-    VirtualRegister m_lexicalEnvironmentRegister;
</del><span class="cx">     mutable CodeBlockHash m_hash;
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;SourceProvider&gt; m_source;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeExecutableInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecode/ExecutableInfo.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -35,9 +35,8 @@
</span><span class="cx"> // FIXME: These flags, ParserModes and propagation to XXXCodeBlocks should be reorganized.
</span><span class="cx"> // https://bugs.webkit.org/show_bug.cgi?id=151547
</span><span class="cx"> struct ExecutableInfo {
</span><del>-    ExecutableInfo(bool needsActivation, bool usesEval, bool isStrictMode, bool isConstructor, bool isBuiltinFunction, ConstructorKind constructorKind, SuperBinding superBinding, SourceParseMode parseMode, DerivedContextType derivedContextType, bool isArrowFunctionContext, bool isClassContext)
-        : m_needsActivation(needsActivation)
-        , m_usesEval(usesEval)
</del><ins>+    ExecutableInfo(bool usesEval, bool isStrictMode, bool isConstructor, bool isBuiltinFunction, ConstructorKind constructorKind, SuperBinding superBinding, SourceParseMode parseMode, DerivedContextType derivedContextType, bool isArrowFunctionContext, bool isClassContext)
+        : m_usesEval(usesEval)
</ins><span class="cx">         , m_isStrictMode(isStrictMode)
</span><span class="cx">         , m_isConstructor(isConstructor)
</span><span class="cx">         , m_isBuiltinFunction(isBuiltinFunction)
</span><span class="lines">@@ -52,7 +51,6 @@
</span><span class="cx">         ASSERT(m_superBinding == static_cast&lt;unsigned&gt;(superBinding));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool needsActivation() const { return m_needsActivation; }
</del><span class="cx">     bool usesEval() const { return m_usesEval; }
</span><span class="cx">     bool isStrictMode() const { return m_isStrictMode; }
</span><span class="cx">     bool isConstructor() const { return m_isConstructor; }
</span><span class="lines">@@ -65,7 +63,6 @@
</span><span class="cx">     bool isClassContext() const { return m_isClassContext; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    unsigned m_needsActivation : 1;
</del><span class="cx">     unsigned m_usesEval : 1;
</span><span class="cx">     unsigned m_isStrictMode : 1;
</span><span class="cx">     unsigned m_isConstructor : 1;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -58,7 +58,6 @@
</span><span class="cx">     , m_numParameters(0)
</span><span class="cx">     , m_vm(vm)
</span><span class="cx">     , m_globalObjectRegister(VirtualRegister())
</span><del>-    , m_needsFullScopeChain(info.needsActivation())
</del><span class="cx">     , m_usesEval(info.usesEval())
</span><span class="cx">     , m_isStrictMode(info.isStrictMode())
</span><span class="cx">     , m_isConstructor(info.isConstructor())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -123,8 +123,6 @@
</span><span class="cx">     bool isArrowFunctionContext() const { return m_isArrowFunctionContext; }
</span><span class="cx">     bool isClassContext() const { return m_isClassContext; }
</span><span class="cx"> 
</span><del>-    bool needsFullScopeChain() const { return m_needsFullScopeChain; }
-
</del><span class="cx">     void addExpressionInfo(unsigned instructionOffset, int divot,
</span><span class="cx">         int startOffset, int endOffset, unsigned line, unsigned column);
</span><span class="cx"> 
</span><span class="lines">@@ -135,7 +133,6 @@
</span><span class="cx">     // Special registers
</span><span class="cx">     void setThisRegister(VirtualRegister thisRegister) { m_thisRegister = thisRegister; }
</span><span class="cx">     void setScopeRegister(VirtualRegister scopeRegister) { m_scopeRegister = scopeRegister; }
</span><del>-    void setActivationRegister(VirtualRegister activationRegister) { m_lexicalEnvironmentRegister = activationRegister; }
</del><span class="cx"> 
</span><span class="cx">     bool usesGlobalObject() const { return m_globalObjectRegister.isValid(); }
</span><span class="cx">     void setGlobalObjectRegister(VirtualRegister globalObjectRegister) { m_globalObjectRegister = globalObjectRegister; }
</span><span class="lines">@@ -292,8 +289,6 @@
</span><span class="cx"> 
</span><span class="cx">     VirtualRegister thisRegister() const { return m_thisRegister; }
</span><span class="cx">     VirtualRegister scopeRegister() const { return m_scopeRegister; }
</span><del>-    VirtualRegister activationRegister() const { return m_lexicalEnvironmentRegister; }
-    bool hasActivationRegister() const { return m_lexicalEnvironmentRegister.isValid(); }
</del><span class="cx"> 
</span><span class="cx">     void addPropertyAccessInstruction(unsigned propertyAccessInstruction)
</span><span class="cx">     {
</span><span class="lines">@@ -383,10 +378,8 @@
</span><span class="cx"> 
</span><span class="cx">     VirtualRegister m_thisRegister;
</span><span class="cx">     VirtualRegister m_scopeRegister;
</span><del>-    VirtualRegister m_lexicalEnvironmentRegister;
</del><span class="cx">     VirtualRegister m_globalObjectRegister;
</span><span class="cx"> 
</span><del>-    unsigned m_needsFullScopeChain : 1;
</del><span class="cx">     unsigned m_usesEval : 1;
</span><span class="cx">     unsigned m_isStrictMode : 1;
</span><span class="cx">     unsigned m_isConstructor : 1;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedFunctionExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">     bool isClassContext = executable-&gt;superBinding() == SuperBinding::Needed;
</span><span class="cx"> 
</span><span class="cx">     UnlinkedFunctionCodeBlock* result = UnlinkedFunctionCodeBlock::create(&amp;vm, FunctionCode,
</span><del>-        ExecutableInfo(function-&gt;needsActivation(), function-&gt;usesEval(), function-&gt;isStrictMode(), kind == CodeForConstruct, functionKind == UnlinkedBuiltinFunction, executable-&gt;constructorKind(), executable-&gt;superBinding(), parseMode, executable-&gt;derivedContextType(), false, isClassContext));
</del><ins>+        ExecutableInfo(function-&gt;usesEval(), function-&gt;isStrictMode(), kind == CodeForConstruct, functionKind == UnlinkedBuiltinFunction, executable-&gt;constructorKind(), executable-&gt;superBinding(), parseMode, executable-&gt;derivedContextType(), false, isClassContext));
</ins><span class="cx"> 
</span><span class="cx">     auto generator(std::make_unique&lt;BytecodeGenerator&gt;(vm, function.get(), result, debuggerMode, profilerMode, executable-&gt;parentScopeTDZVariables()));
</span><span class="cx">     error = generator-&gt;generate();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -240,7 +240,7 @@
</span><span class="cx">     SourceParseMode parseMode = codeBlock-&gt;parseMode();
</span><span class="cx"> 
</span><span class="cx">     bool containsArrowOrEvalButNotInArrowBlock = needsToUpdateArrowFunctionContext() &amp;&amp; !m_codeBlock-&gt;isArrowFunction();
</span><del>-    bool shouldCaptureSomeOfTheThings = m_shouldEmitDebugHooks || m_codeBlock-&gt;needsFullScopeChain() || containsArrowOrEvalButNotInArrowBlock;
</del><ins>+    bool shouldCaptureSomeOfTheThings = m_shouldEmitDebugHooks || functionNode-&gt;needsActivation() || containsArrowOrEvalButNotInArrowBlock;
</ins><span class="cx"> 
</span><span class="cx">     bool shouldCaptureAllOfTheThings = m_shouldEmitDebugHooks || codeBlock-&gt;usesEval();
</span><span class="cx">     bool needsArguments = (functionNode-&gt;usesArguments() || codeBlock-&gt;usesEval() || (functionNode-&gt;usesArrowFunction() &amp;&amp; !codeBlock-&gt;isArrowFunction()));
</span><span class="lines">@@ -661,14 +661,11 @@
</span><span class="cx">     moduleEnvironmentSymbolTable-&gt;setUsesNonStrictEval(m_usesNonStrictEval);
</span><span class="cx">     moduleEnvironmentSymbolTable-&gt;setScopeType(SymbolTable::ScopeType::LexicalScope);
</span><span class="cx"> 
</span><del>-    bool shouldCaptureSomeOfTheThings = m_shouldEmitDebugHooks || m_codeBlock-&gt;needsFullScopeChain();
</del><span class="cx">     bool shouldCaptureAllOfTheThings = m_shouldEmitDebugHooks || codeBlock-&gt;usesEval();
</span><span class="cx">     if (shouldCaptureAllOfTheThings)
</span><span class="cx">         moduleProgramNode-&gt;varDeclarations().markAllVariablesAsCaptured();
</span><span class="cx"> 
</span><span class="cx">     auto captures = [&amp;] (UniquedStringImpl* uid) -&gt; bool {
</span><del>-        if (!shouldCaptureSomeOfTheThings)
-            return false;
</del><span class="cx">         return moduleProgramNode-&gt;captures(uid);
</span><span class="cx">     };
</span><span class="cx">     auto lookUpVarKind = [&amp;] (UniquedStringImpl* uid, const VariableEnvironmentEntry&amp; entry) -&gt; VarKind {
</span><span class="lines">@@ -962,7 +959,6 @@
</span><span class="cx"> void BytecodeGenerator::initializeVarLexicalEnvironment(int symbolTableConstantIndex)
</span><span class="cx"> {
</span><span class="cx">     RELEASE_ASSERT(m_lexicalEnvironmentRegister);
</span><del>-    m_codeBlock-&gt;setActivationRegister(m_lexicalEnvironmentRegister-&gt;virtualRegister());
</del><span class="cx">     emitOpcode(op_create_lexical_environment);
</span><span class="cx">     instructions().append(m_lexicalEnvironmentRegister-&gt;index());
</span><span class="cx">     instructions().append(scopeRegister()-&gt;index());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -354,7 +354,7 @@
</span><span class="cx"> 
</span><span class="cx">         RegisterID* destinationForAssignResult(RegisterID* dst)
</span><span class="cx">         {
</span><del>-            if (dst &amp;&amp; dst != ignoredResult() &amp;&amp; m_codeBlock-&gt;needsFullScopeChain())
</del><ins>+            if (dst &amp;&amp; dst != ignoredResult())
</ins><span class="cx">                 return dst-&gt;isTemporary() ? dst : newTemporary();
</span><span class="cx">             return 0;
</span><span class="cx">         }
</span><span class="lines">@@ -465,7 +465,7 @@
</span><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE bool leftHandSideNeedsCopy(bool rightHasAssignments, bool rightIsPure)
</span><span class="cx">         {
</span><del>-            return (m_codeType != FunctionCode || m_codeBlock-&gt;needsFullScopeChain() || rightHasAssignments) &amp;&amp; !rightIsPure;
</del><ins>+            return (m_codeType != FunctionCode || rightHasAssignments) &amp;&amp; !rightIsPure;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE PassRefPtr&lt;RegisterID&gt; emitNodeForLeftHandSide(ExpressionNode* n, bool rightHasAssignments, bool rightIsPure)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -1338,7 +1338,6 @@
</span><span class="cx">         dataLog(&quot;    Might inline function: &quot;, mightInlineFunctionFor(codeBlock, kind), &quot;\n&quot;);
</span><span class="cx">         dataLog(&quot;    Might compile function: &quot;, mightCompileFunctionFor(codeBlock, kind), &quot;\n&quot;);
</span><span class="cx">         dataLog(&quot;    Is supported for inlining: &quot;, isSupportedForInlining(codeBlock), &quot;\n&quot;);
</span><del>-        dataLog(&quot;    Needs activation: &quot;, codeBlock-&gt;ownerScriptExecutable()-&gt;needsActivation(), &quot;\n&quot;);
</del><span class="cx">         dataLog(&quot;    Is inlining candidate: &quot;, codeBlock-&gt;ownerScriptExecutable()-&gt;isInliningCandidate(), &quot;\n&quot;);
</span><span class="cx">     }
</span><span class="cx">     if (!canInline(capabilityLevel)) {
</span><span class="lines">@@ -4909,7 +4908,6 @@
</span><span class="cx">                 &quot; &quot;, inlineCallFrame()-&gt;directCaller);
</span><span class="cx">         }
</span><span class="cx">         dataLog(
</span><del>-            &quot;: needsActivation = &quot;, codeBlock-&gt;needsActivation(),
</del><span class="cx">             &quot;, isStrictMode = &quot;, codeBlock-&gt;ownerScriptExecutable()-&gt;isStrictMode(), &quot;\n&quot;);
</span><span class="cx">         codeBlock-&gt;baselineVersion()-&gt;dumpBytecode();
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGGraphh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGGraph.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGGraph.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/dfg/DFGGraph.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -398,26 +398,6 @@
</span><span class="cx">         return hasExitSite(node-&gt;origin.semantic, exitKind);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    VirtualRegister activationRegister()
-    {
-        return m_profiledBlock-&gt;activationRegister();
-    }
-    
-    VirtualRegister uncheckedActivationRegister()
-    {
-        return m_profiledBlock-&gt;uncheckedActivationRegister();
-    }
-    
-    VirtualRegister machineActivationRegister()
-    {
-        return m_profiledBlock-&gt;activationRegister();
-    }
-    
-    VirtualRegister uncheckedMachineActivationRegister()
-    {
-        return m_profiledBlock-&gt;uncheckedActivationRegister();
-    }
-    
</del><span class="cx">     ValueProfile* valueProfileFor(Node*);
</span><span class="cx">     MethodOfGettingAValueProfile methodOfGettingAValueProfileFor(Node*);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGStackLayoutPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGStackLayoutPhase.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGStackLayoutPhase.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/dfg/DFGStackLayoutPhase.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -173,8 +173,6 @@
</span><span class="cx">             data-&gt;machineLocal = assign(allocation, data-&gt;local);
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        // This register is never valid for DFG code blocks.
-        codeBlock()-&gt;setActivationRegister(VirtualRegister());
</del><span class="cx">         if (LIKELY(!m_graph.hasDebuggerEnabled()))
</span><span class="cx">             codeBlock()-&gt;setScopeRegister(VirtualRegister());
</span><span class="cx">         else
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -84,20 +84,6 @@
</span><span class="cx">     return CallSiteIndex(callSiteAsRawBits());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CallFrame::hasActivation() const
-{
-    JSValue activation = uncheckedActivation();
-    return !!activation &amp;&amp; activation.isCell();
-}
-
-JSValue CallFrame::uncheckedActivation() const
-{
-    CodeBlock* codeBlock = this-&gt;codeBlock();
-    RELEASE_ASSERT(codeBlock-&gt;needsActivation());
-    VirtualRegister activationRegister = codeBlock-&gt;activationRegister();
-    return registers()[activationRegister.offset()].jsValue();
-}
-
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> JSStack* CallFrame::stack()
</span><span class="cx"> {
</span><span class="lines">@@ -208,28 +194,6 @@
</span><span class="cx">     return static_cast&lt;CallFrame*&gt;(callerFrameOrVMEntryFrame());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSLexicalEnvironment* CallFrame::lexicalEnvironment() const
-{
-    CodeBlock* codeBlock = this-&gt;codeBlock();
-    RELEASE_ASSERT(codeBlock-&gt;needsActivation());
-    VirtualRegister activationRegister = codeBlock-&gt;activationRegister();
-    return registers()[activationRegister.offset()].Register::lexicalEnvironment();
-}
-
-JSLexicalEnvironment* CallFrame::lexicalEnvironmentOrNullptr() const
-{
-    CodeBlock* codeBlock = this-&gt;codeBlock();
-    return codeBlock-&gt;needsActivation() ? lexicalEnvironment() : nullptr;
-}
-    
-void CallFrame::setActivation(JSLexicalEnvironment* lexicalEnvironment)
-{
-    CodeBlock* codeBlock = this-&gt;codeBlock();
-    RELEASE_ASSERT(codeBlock-&gt;needsActivation());
-    VirtualRegister activationRegister = codeBlock-&gt;activationRegister();
-    registers()[activationRegister.offset()] = lexicalEnvironment;
-}
-
</del><span class="cx"> String CallFrame::friendlyFunctionName()
</span><span class="cx"> {
</span><span class="cx">     CodeBlock* codeBlock = this-&gt;codeBlock();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -34,7 +34,6 @@
</span><span class="cx"> namespace JSC  {
</span><span class="cx"> 
</span><span class="cx">     class Arguments;
</span><del>-    class JSLexicalEnvironment;
</del><span class="cx">     class Interpreter;
</span><span class="cx">     class JSScope;
</span><span class="cx"> 
</span><span class="lines">@@ -75,11 +74,6 @@
</span><span class="cx">             return this[scopeRegisterOffset].Register::scope();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        bool hasActivation() const;
-        JSLexicalEnvironment* lexicalEnvironment() const;
-        JSLexicalEnvironment* lexicalEnvironmentOrNullptr() const;
-        JSValue uncheckedActivation() const;
-
</del><span class="cx">         // Global object in which execution began.
</span><span class="cx">         JS_EXPORT_PRIVATE JSGlobalObject* vmEntryGlobalObject();
</span><span class="cx"> 
</span><span class="lines">@@ -164,7 +158,6 @@
</span><span class="cx"> 
</span><span class="cx">         void setCallerFrame(CallFrame* frame) { callerFrameAndPC().callerFrame = frame; }
</span><span class="cx">         void setScope(int scopeRegisterOffset, JSScope* scope) { static_cast&lt;Register*&gt;(this)[scopeRegisterOffset] = scope; }
</span><del>-        void setActivation(JSLexicalEnvironment*);
</del><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC,
</span><span class="cx">             CallFrame* callerFrame, int argc, JSObject* callee) 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterRegisterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/Register.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/Register.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/interpreter/Register.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -60,7 +60,6 @@
</span><span class="cx">         Register&amp; operator=(JSObject*);
</span><span class="cx"> 
</span><span class="cx">         int32_t i() const;
</span><del>-        JSLexicalEnvironment* lexicalEnvironment() const;
</del><span class="cx">         CallFrame* callFrame() const;
</span><span class="cx">         CodeBlock* codeBlock() const;
</span><span class="cx">         JSObject* object() const;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -1031,7 +1031,6 @@
</span><span class="cx"> {
</span><span class="cx">     LLINT_BEGIN();
</span><span class="cx">     CodeBlock* codeBlock = exec-&gt;codeBlock();
</span><del>-    ASSERT(codeBlock-&gt;codeType() != FunctionCode || !codeBlock-&gt;needsActivation() || exec-&gt;hasActivation());
</del><span class="cx">     JSScope* scope = exec-&gt;uncheckedR(pc[2].u.operand).Register::scope();
</span><span class="cx"> #if LLINT_SLOW_PATH_TRACING
</span><span class="cx">     dataLogF(&quot;Creating function!\n&quot;);
</span><span class="lines">@@ -1043,7 +1042,6 @@
</span><span class="cx"> {
</span><span class="cx">     LLINT_BEGIN();
</span><span class="cx">     CodeBlock* codeBlock = exec-&gt;codeBlock();
</span><del>-    ASSERT(codeBlock-&gt;codeType() != FunctionCode || !codeBlock-&gt;needsActivation() || exec-&gt;hasActivation());
</del><span class="cx">     JSScope* scope = exec-&gt;uncheckedR(pc[2].u.operand).Register::scope();
</span><span class="cx"> #if LLINT_SLOW_PATH_TRACING
</span><span class="cx">     dataLogF(&quot;Creating function!\n&quot;);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeExecutableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Executable.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Executable.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/runtime/Executable.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -348,7 +348,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool usesEval() const { return m_features &amp; EvalFeature; }
</span><span class="cx">     bool usesArguments() const { return m_features &amp; ArgumentsFeature; }
</span><del>-    bool needsActivation() const { return m_hasCapturedVariables || m_features &amp; (EvalFeature | WithFeature); }
</del><span class="cx">     bool isArrowFunctionContext() const { return m_isArrowFunctionContext; }
</span><span class="cx">     bool isStrictMode() const { return m_features &amp; StrictModeFeature; }
</span><span class="cx">     DerivedContextType derivedContextType() const { return m_derivedContextType; }
</span><span class="lines">@@ -458,7 +457,7 @@
</span><span class="cx">         
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><del>-    ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, SuperBinding::NotNeeded, SourceParseMode::ProgramMode, derivedContextType(), isArrowFunctionContext() , false); }
</del><ins>+    ExecutableInfo executableInfo() const { return ExecutableInfo(usesEval(), isStrictMode(), false, false, ConstructorKind::None, SuperBinding::NotNeeded, SourceParseMode::ProgramMode, derivedContextType(), isArrowFunctionContext() , false); }
</ins><span class="cx"> 
</span><span class="cx">     unsigned numVariables() { return m_unlinkedEvalCodeBlock-&gt;numVariables(); }
</span><span class="cx">     unsigned numberOfFunctionDecls() { return m_unlinkedEvalCodeBlock-&gt;numberOfFunctionDecls(); }
</span><span class="lines">@@ -512,7 +511,7 @@
</span><span class="cx">         
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><del>-    ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, SuperBinding::NotNeeded, SourceParseMode::ProgramMode, derivedContextType(), isArrowFunctionContext(), false); }
</del><ins>+    ExecutableInfo executableInfo() const { return ExecutableInfo(usesEval(), isStrictMode(), false, false, ConstructorKind::None, SuperBinding::NotNeeded, SourceParseMode::ProgramMode, derivedContextType(), isArrowFunctionContext(), false); }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     friend class ExecutableBase;
</span><span class="lines">@@ -553,7 +552,7 @@
</span><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><del>-    ExecutableInfo executableInfo() const { return ExecutableInfo(needsActivation(), usesEval(), isStrictMode(), false, false, ConstructorKind::None, SuperBinding::NotNeeded, SourceParseMode::ModuleEvaluateMode, derivedContextType(), isArrowFunctionContext(), false); }
</del><ins>+    ExecutableInfo executableInfo() const { return ExecutableInfo(usesEval(), isStrictMode(), false, false, ConstructorKind::None, SuperBinding::NotNeeded, SourceParseMode::ModuleEvaluateMode, derivedContextType(), isArrowFunctionContext(), false); }
</ins><span class="cx"> 
</span><span class="cx">     UnlinkedModuleProgramCodeBlock* unlinkedModuleProgramCodeBlock() { return m_unlinkedModuleProgramCodeBlock.get(); }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSLexicalEnvironmenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSLexicalEnvironment.h (195861 => 195862)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSLexicalEnvironment.h        2016-01-29 23:58:18 UTC (rev 195861)
+++ trunk/Source/JavaScriptCore/runtime/JSLexicalEnvironment.h        2016-01-30 00:01:48 UTC (rev 195862)
</span><span class="lines">@@ -89,11 +89,6 @@
</span><span class="cx">     return jsCast&lt;JSLexicalEnvironment*&gt;(asObject(value));
</span><span class="cx"> }
</span><span class="cx">     
</span><del>-ALWAYS_INLINE JSLexicalEnvironment* Register::lexicalEnvironment() const
-{
-    return asActivation(jsValue());
-}
-
</del><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span><span class="cx"> #endif // JSLexicalEnvironment_h
</span></span></pre>
</div>
</div>

</body>
</html>