<!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>[174216] trunk/Source</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/174216">174216</a></dd>
<dt>Author</dt> <dd>mark.lam@apple.com</dd>
<dt>Date</dt> <dd>2014-10-02 08:15:03 -0700 (Thu, 02 Oct 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Fixed the Inspector to be able to properly distinguish between scope types.
&lt;https://webkit.org/b/137279&gt;

Source/JavaScriptCore:

Reviewed by Geoffrey Garen.

The pre-existing code incorrectly labels Catch Scopes and Function Name Scopes
as With Scopes.  This patch will fix this.

* bytecode/BytecodeList.json:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitPushFunctionNameScope):
(JSC::BytecodeGenerator::emitPushCatchScope):
- These now passes stores the desired JSNameScope::Type in a bytecode operand.
* debugger/DebuggerScope.cpp:
(JSC::DebuggerScope::isCatchScope):
(JSC::DebuggerScope::isFunctionNameScope):
- Added queries to be able to explicitly test if the scope is a CatchScope
  or FunctionNameScope.  The FunctionNameScope is the case where the
  NameScope is used to capture the function name of a function expression.
* debugger/DebuggerScope.h:
* inspector/InjectedScriptSource.js:
* inspector/JSJavaScriptCallFrame.cpp:
(Inspector::JSJavaScriptCallFrame::scopeType):
* inspector/JSJavaScriptCallFrame.h:
* inspector/JSJavaScriptCallFramePrototype.cpp:
(Inspector::JSJavaScriptCallFramePrototype::finishCreation):
(Inspector::jsJavaScriptCallFrameConstantFUNCTION_NAME_SCOPE):
* inspector/protocol/Debugger.json:
* jit/CCallHelpers.h:
(JSC::CCallHelpers::setupArgumentsWithExecState):
* jit/JIT.h:
* jit/JITInlines.h:
(JSC::JIT::callOperation):
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_push_name_scope):
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::emit_op_push_name_scope):
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* llint/LowLevelInterpreter.asm:
* runtime/JSFunction.cpp:
(JSC::JSFunction::addNameScopeIfNeeded):
* runtime/JSNameScope.h:
(JSC::JSNameScope::create):
(JSC::JSNameScope::isFunctionNameScope):
(JSC::JSNameScope::isCatchScope):
(JSC::JSNameScope::JSNameScope):
- Now stores the JSNameScope::Type in a field.

Source/WebInspectorUI:

Reviewed by Geoffrey Garen and Joseph Pecoraro.

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Controllers/DebuggerManager.js:
* UserInterface/Models/ScopeChainNode.js:
* UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
- Added handling of the FunctionNameScope case.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeListjson">trunk/Source/JavaScriptCore/bytecode/BytecodeList.json</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredebuggerDebuggerScopecpp">trunk/Source/JavaScriptCore/debugger/DebuggerScope.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredebuggerDebuggerScopeh">trunk/Source/JavaScriptCore/debugger/DebuggerScope.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScriptSourcejs">trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFramecpp">trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFrameh">trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFramePrototypecpp">trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFramePrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolDebuggerjson">trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json</a></li>
<li><a href="#trunkSourceJavaScriptCorejitCCallHelpersh">trunk/Source/JavaScriptCore/jit/CCallHelpers.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITh">trunk/Source/JavaScriptCore/jit/JIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITInlinesh">trunk/Source/JavaScriptCore/jit/JITInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodescpp">trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodes32_64cpp">trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationsh">trunk/Source/JavaScriptCore/jit/JITOperations.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterasm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSFunctioncpp">trunk/Source/JavaScriptCore/runtime/JSFunction.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSNameScopeh">trunk/Source/JavaScriptCore/runtime/JSNameScope.h</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs">trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersDebuggerManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsScopeChainNodejs">trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsScopeChainDetailsSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -1,3 +1,56 @@
</span><ins>+2014-10-02  Mark Lam  &lt;mark.lam@apple.com&gt;
+
+        Fixed the Inspector to be able to properly distinguish between scope types.
+        &lt;https://webkit.org/b/137279&gt;
+
+        Reviewed by Geoffrey Garen.
+
+        The pre-existing code incorrectly labels Catch Scopes and Function Name Scopes
+        as With Scopes.  This patch will fix this.
+
+        * bytecode/BytecodeList.json:
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::emitPushFunctionNameScope):
+        (JSC::BytecodeGenerator::emitPushCatchScope):
+        - These now passes stores the desired JSNameScope::Type in a bytecode operand.
+        * debugger/DebuggerScope.cpp:
+        (JSC::DebuggerScope::isCatchScope):
+        (JSC::DebuggerScope::isFunctionNameScope):
+        - Added queries to be able to explicitly test if the scope is a CatchScope
+          or FunctionNameScope.  The FunctionNameScope is the case where the
+          NameScope is used to capture the function name of a function expression.
+        * debugger/DebuggerScope.h:
+        * inspector/InjectedScriptSource.js:
+        * inspector/JSJavaScriptCallFrame.cpp:
+        (Inspector::JSJavaScriptCallFrame::scopeType):
+        * inspector/JSJavaScriptCallFrame.h:
+        * inspector/JSJavaScriptCallFramePrototype.cpp:
+        (Inspector::JSJavaScriptCallFramePrototype::finishCreation):
+        (Inspector::jsJavaScriptCallFrameConstantFUNCTION_NAME_SCOPE):
+        * inspector/protocol/Debugger.json:
+        * jit/CCallHelpers.h:
+        (JSC::CCallHelpers::setupArgumentsWithExecState):
+        * jit/JIT.h:
+        * jit/JITInlines.h:
+        (JSC::JIT::callOperation):
+        * jit/JITOpcodes.cpp:
+        (JSC::JIT::emit_op_push_name_scope):
+        * jit/JITOpcodes32_64.cpp:
+        (JSC::JIT::emit_op_push_name_scope):
+        * jit/JITOperations.cpp:
+        * jit/JITOperations.h:
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+        * llint/LowLevelInterpreter.asm:
+        * runtime/JSFunction.cpp:
+        (JSC::JSFunction::addNameScopeIfNeeded):
+        * runtime/JSNameScope.h:
+        (JSC::JSNameScope::create):
+        (JSC::JSNameScope::isFunctionNameScope):
+        (JSC::JSNameScope::isCatchScope):
+        (JSC::JSNameScope::JSNameScope):
+        - Now stores the JSNameScope::Type in a field.
+
</ins><span class="cx"> 2014-10-01  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r174180, r174183, and r174186.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeListjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeList.json (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">             { &quot;name&quot; : &quot;op_put_to_scope&quot;, &quot;length&quot; : 7 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_push_with_scope&quot;, &quot;length&quot; : 2 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_pop_scope&quot;, &quot;length&quot; : 1 },
</span><del>-            { &quot;name&quot; : &quot;op_push_name_scope&quot;, &quot;length&quot; : 4 },
</del><ins>+            { &quot;name&quot; : &quot;op_push_name_scope&quot;, &quot;length&quot; : 5 },
</ins><span class="cx">             { &quot;name&quot; : &quot;op_catch&quot;, &quot;length&quot; : 2 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_throw&quot;, &quot;length&quot; : 2 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_throw_static_error&quot;, &quot;length&quot; : 3 },
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -2294,6 +2294,7 @@
</span><span class="cx">     instructions().append(addConstant(property));
</span><span class="cx">     instructions().append(value-&gt;index());
</span><span class="cx">     instructions().append(attributes);
</span><ins>+    instructions().append(JSNameScope::FunctionNameScope);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void BytecodeGenerator::emitPushCatchScope(const Identifier&amp; property, RegisterID* value, unsigned attributes)
</span><span class="lines">@@ -2307,6 +2308,7 @@
</span><span class="cx">     instructions().append(addConstant(property));
</span><span class="cx">     instructions().append(value-&gt;index());
</span><span class="cx">     instructions().append(attributes);
</span><ins>+    instructions().append(JSNameScope::CatchScope);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void BytecodeGenerator::beginSwitch(RegisterID* scrutineeRegister, SwitchInfo::SwitchType type)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredebuggerDebuggerScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/debugger/DebuggerScope.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/debugger/DebuggerScope.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/debugger/DebuggerScope.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSLexicalEnvironment.h&quot;
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><ins>+#include &quot;JSNameScope.h&quot;
</ins><span class="cx"> #include &quot;JSWithScope.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -154,6 +155,16 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool DebuggerScope::isCatchScope() const
+{
+    return m_scope-&gt;isNameScopeObject() &amp;&amp; reinterpret_cast&lt;JSNameScope*&gt;(m_scope.get())-&gt;isCatchScope();
+}
+
+bool DebuggerScope::isFunctionNameScope() const
+{
+    return m_scope-&gt;isNameScopeObject() &amp;&amp; reinterpret_cast&lt;JSNameScope*&gt;(m_scope.get())-&gt;isFunctionNameScope();
+}
+
</ins><span class="cx"> bool DebuggerScope::isWithScope() const
</span><span class="cx"> {
</span><span class="cx">     return m_scope-&gt;isWithScope();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredebuggerDebuggerScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/debugger/DebuggerScope.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/debugger/DebuggerScope.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/debugger/DebuggerScope.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -84,6 +84,8 @@
</span><span class="cx">     void invalidateChain();
</span><span class="cx">     bool isValid() const { return !!m_scope; }
</span><span class="cx"> 
</span><ins>+    bool isCatchScope() const;
+    bool isFunctionNameScope() const;
</ins><span class="cx">     bool isWithScope() const;
</span><span class="cx">     bool isGlobalScope() const;
</span><span class="cx">     bool isFunctionOrEvalScope() const;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScriptSourcejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2007 Apple Inc.  All rights reserved.
</del><ins>+ * Copyright (C) 2007, 2014 Apple Inc.  All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -1018,6 +1018,7 @@
</span><span class="cx">     const WITH_SCOPE = 2;
</span><span class="cx">     const CLOSURE_SCOPE = 3;
</span><span class="cx">     const CATCH_SCOPE = 4;
</span><ins>+    const FUNCTION_NAME_SCOPE = 5;
</ins><span class="cx"> 
</span><span class="cx">     /** @type {!Object.&lt;number, string&gt;} */
</span><span class="cx">     var scopeTypeNames = {};
</span><span class="lines">@@ -1026,6 +1027,7 @@
</span><span class="cx">     scopeTypeNames[WITH_SCOPE] = &quot;with&quot;;
</span><span class="cx">     scopeTypeNames[CLOSURE_SCOPE] = &quot;closure&quot;;
</span><span class="cx">     scopeTypeNames[CATCH_SCOPE] = &quot;catch&quot;;
</span><ins>+    scopeTypeNames[FUNCTION_NAME_SCOPE] = &quot;functionName&quot;;
</ins><span class="cx"> 
</span><span class="cx">     return {
</span><span class="cx">         object: injectedScript._wrapObject(scopeObject, groupId),
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -111,13 +111,16 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (!index) {
</span><ins>+            if (scope-&gt;isCatchScope())
+                return jsNumber(JSJavaScriptCallFrame::CATCH_SCOPE);
+            if (scope-&gt;isFunctionNameScope())
+                return jsNumber(JSJavaScriptCallFrame::FUNCTION_NAME_SCOPE);
</ins><span class="cx">             if (scope-&gt;isWithScope())
</span><span class="cx">                 return jsNumber(JSJavaScriptCallFrame::WITH_SCOPE);
</span><span class="cx">             if (scope-&gt;isGlobalScope()) {
</span><span class="cx">                 ASSERT(++iter == end);
</span><span class="cx">                 return jsNumber(JSJavaScriptCallFrame::GLOBAL_SCOPE);
</span><span class="cx">             }
</span><del>-            // FIXME: We should be identifying and returning CATCH_SCOPE appropriately.
</del><span class="cx">             ASSERT(scope-&gt;isFunctionOrEvalScope());
</span><span class="cx">             return jsNumber(JSJavaScriptCallFrame::CLOSURE_SCOPE);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -77,6 +77,7 @@
</span><span class="cx">     static const unsigned short WITH_SCOPE = 2;
</span><span class="cx">     static const unsigned short CLOSURE_SCOPE = 3;
</span><span class="cx">     static const unsigned short CATCH_SCOPE = 4;
</span><ins>+    static const unsigned short FUNCTION_NAME_SCOPE = 5;
</ins><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     static const unsigned StructureFlags = Base::StructureFlags;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSJavaScriptCallFramePrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFramePrototype.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFramePrototype.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/inspector/JSJavaScriptCallFramePrototype.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -59,6 +59,7 @@
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameConstantWITH_SCOPE(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameConstantCLOSURE_SCOPE(ExecState*);
</span><span class="cx"> static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameConstantCATCH_SCOPE(ExecState*);
</span><ins>+static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameConstantFUNCTION_NAME_SCOPE(ExecState*);
</ins><span class="cx"> 
</span><span class="cx"> const ClassInfo JSJavaScriptCallFramePrototype::s_info = { &quot;JavaScriptCallFrame&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSJavaScriptCallFramePrototype) };
</span><span class="cx"> 
</span><span class="lines">@@ -94,6 +95,7 @@
</span><span class="cx">     JSC_NATIVE_NON_INDEX_ACCESSOR(&quot;WITH_SCOPE&quot;, jsJavaScriptCallFrameConstantWITH_SCOPE, DontEnum | Accessor);
</span><span class="cx">     JSC_NATIVE_NON_INDEX_ACCESSOR(&quot;CLOSURE_SCOPE&quot;, jsJavaScriptCallFrameConstantCLOSURE_SCOPE, DontEnum | Accessor);
</span><span class="cx">     JSC_NATIVE_NON_INDEX_ACCESSOR(&quot;CATCH_SCOPE&quot;, jsJavaScriptCallFrameConstantCATCH_SCOPE, DontEnum | Accessor);
</span><ins>+    JSC_NATIVE_NON_INDEX_ACCESSOR(&quot;FUNCTION_NAME_SCOPE&quot;, jsJavaScriptCallFrameConstantFUNCTION_NAME_SCOPE, DontEnum | Accessor);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFramePrototypeFunctionEvaluate(ExecState* exec)
</span><span class="lines">@@ -231,6 +233,11 @@
</span><span class="cx">     return JSValue::encode(jsNumber(JSJavaScriptCallFrame::CATCH_SCOPE));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameConstantFUNCTION_NAME_SCOPE(ExecState*)
+{
+    return JSValue::encode(jsNumber(JSJavaScriptCallFrame::FUNCTION_NAME_SCOPE));
+}
+
</ins><span class="cx"> } // namespace Inspector
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(INSPECTOR)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolDebuggerjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">             &quot;id&quot;: &quot;Scope&quot;,
</span><span class="cx">             &quot;type&quot;: &quot;object&quot;,
</span><span class="cx">             &quot;properties&quot;: [
</span><del>-                { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;global&quot;, &quot;local&quot;, &quot;with&quot;, &quot;closure&quot;, &quot;catch&quot;], &quot;description&quot;: &quot;Scope type.&quot; },
</del><ins>+                { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;global&quot;, &quot;local&quot;, &quot;with&quot;, &quot;closure&quot;, &quot;catch&quot;, &quot;functionName&quot;], &quot;description&quot;: &quot;Scope type.&quot; },
</ins><span class="cx">                 { &quot;name&quot;: &quot;object&quot;, &quot;$ref&quot;: &quot;Runtime.RemoteObject&quot;, &quot;description&quot;: &quot;Object representing the scope. For &lt;code&gt;global&lt;/code&gt; and &lt;code&gt;with&lt;/code&gt; scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties.&quot; }
</span><span class="cx">             ],
</span><span class="cx">             &quot;description&quot;: &quot;Scope description.&quot;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitCCallHelpersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/CCallHelpers.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/CCallHelpers.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/CCallHelpers.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -474,6 +474,17 @@
</span><span class="cx">         addCallArgument(arg4);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4, TrustedImm32 arg5)
+    {
+        resetCallArguments();
+        addCallArgument(GPRInfo::callFrameRegister);
+        addCallArgument(arg1);
+        addCallArgument(arg2);
+        addCallArgument(arg3);
+        addCallArgument(arg4);
+        addCallArgument(arg5);
+    }
+
</ins><span class="cx">     ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4, TrustedImmPtr arg5)
</span><span class="cx">     {
</span><span class="cx">         resetCallArguments();
</span><span class="lines">@@ -1285,6 +1296,17 @@
</span><span class="cx">         move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+#if CPU(X86_64) || CPU(ARM64)
+    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, TrustedImm32 arg3, TrustedImm32 arg4)
+    {
+        move(arg2, GPRInfo::argumentGPR2); // In case arg2 is argumentGPR1.
+        move(arg1, GPRInfo::argumentGPR1);
+        move(arg3, GPRInfo::argumentGPR3);
+        move(arg4, GPRInfo::argumentGPR4);
+        move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
+    }
+#endif
+
</ins><span class="cx">     ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, TrustedImmPtr arg3)
</span><span class="cx">     {
</span><span class="cx">         move(arg2, GPRInfo::argumentGPR2); // In case arg2 is argumentGPR1.
</span><span class="lines">@@ -1364,6 +1386,13 @@
</span><span class="cx">         setupArgumentsWithExecState(arg1, arg2, arg3);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4, TrustedImm32 arg5)
+    {
+        poke(arg5, POKE_ARGUMENT_OFFSET + 1);
+        poke(arg4, POKE_ARGUMENT_OFFSET);
+        setupArgumentsWithExecState(arg1, arg2, arg3);
+    }
+
</ins><span class="cx">     ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4, TrustedImmPtr arg5)
</span><span class="cx">     {
</span><span class="cx">         poke(arg5, POKE_ARGUMENT_OFFSET + 1);
</span><span class="lines">@@ -1645,6 +1674,15 @@
</span><span class="cx">         move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
</span><span class="cx">     }
</span><span class="cx">     
</span><ins>+    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4, TrustedImm32 arg5)
+    {
+        setupTwoStubArgsGPR&lt;GPRInfo::argumentGPR2, GPRInfo::argumentGPR3&gt;(arg2, arg3);
+        move(arg1, GPRInfo::argumentGPR1);
+        move(arg4, GPRInfo::argumentGPR4);
+        move(arg5, GPRInfo::argumentGPR5);
+        move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
+    }
+
</ins><span class="cx">     ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, TrustedImm32 arg4)
</span><span class="cx">     {
</span><span class="cx">         setupThreeStubArgsGPR&lt;GPRInfo::argumentGPR1, GPRInfo::argumentGPR2, GPRInfo::argumentGPR3&gt;(arg1, arg2, arg3);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/JIT.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -719,7 +719,7 @@
</span><span class="cx">         MacroAssembler::Call callOperation(V_JITOperation_ECC, RegisterID, RegisterID);
</span><span class="cx">         MacroAssembler::Call callOperation(V_JITOperation_ECICC, RegisterID, const Identifier*, RegisterID, RegisterID);
</span><span class="cx">         MacroAssembler::Call callOperation(J_JITOperation_EE, RegisterID);
</span><del>-        MacroAssembler::Call callOperation(V_JITOperation_EIdJZ, const Identifier*, RegisterID, int32_t);
</del><ins>+        MacroAssembler::Call callOperation(V_JITOperation_EIdJZZ, const Identifier*, RegisterID, int32_t, int32_t);
</ins><span class="cx">         MacroAssembler::Call callOperation(V_JITOperation_EJ, RegisterID);
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx">         MacroAssembler::Call callOperationNoExceptionCheck(V_JITOperation_EJ, RegisterID);
</span><span class="lines">@@ -751,7 +751,7 @@
</span><span class="cx">         MacroAssembler::Call callOperation(P_JITOperation_EJS, GPRReg, GPRReg, size_t);
</span><span class="cx">         MacroAssembler::Call callOperation(S_JITOperation_EJ, RegisterID, RegisterID);
</span><span class="cx">         MacroAssembler::Call callOperation(S_JITOperation_EJJ, RegisterID, RegisterID, RegisterID, RegisterID);
</span><del>-        MacroAssembler::Call callOperation(V_JITOperation_EIdJZ, const Identifier*, RegisterID, RegisterID, int32_t);
</del><ins>+        MacroAssembler::Call callOperation(V_JITOperation_EIdJZZ, const Identifier*, RegisterID, RegisterID, int32_t, int32_t);
</ins><span class="cx">         MacroAssembler::Call callOperation(V_JITOperation_EJ, RegisterID, RegisterID);
</span><span class="cx">         MacroAssembler::Call callOperation(V_JITOperation_EJJJ, RegisterID, RegisterID, RegisterID, RegisterID, RegisterID, RegisterID);
</span><span class="cx">         MacroAssembler::Call callOperation(V_JITOperation_EJZ, RegisterID, RegisterID, int32_t);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlines.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlines.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/JITInlines.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -441,9 +441,9 @@
</span><span class="cx">     return appendCallWithExceptionCheck(operation);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EIdJZ operation, const Identifier* identOp1, RegisterID regOp2, int32_t op3)
</del><ins>+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EIdJZZ operation, const Identifier* identOp1, RegisterID regOp2, int32_t op3, int32_t op4)
</ins><span class="cx"> {
</span><del>-    setupArgumentsWithExecState(TrustedImmPtr(identOp1), regOp2, TrustedImm32(op3));
</del><ins>+    setupArgumentsWithExecState(TrustedImmPtr(identOp1), regOp2, TrustedImm32(op3), TrustedImm32(op4));
</ins><span class="cx">     return appendCallWithExceptionCheck(operation);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -575,9 +575,9 @@
</span><span class="cx">     return appendCallWithExceptionCheck(operation);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EIdJZ operation, const Identifier* identOp1, RegisterID regOp2Tag, RegisterID regOp2Payload, int32_t op3)
</del><ins>+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EIdJZZ operation, const Identifier* identOp1, RegisterID regOp2Tag, RegisterID regOp2Payload, int32_t op3, int32_t op4)
</ins><span class="cx"> {
</span><del>-    setupArgumentsWithExecState(TrustedImmPtr(identOp1), regOp2Payload, regOp2Tag, TrustedImm32(op3));
</del><ins>+    setupArgumentsWithExecState(TrustedImmPtr(identOp1), regOp2Payload, regOp2Tag, TrustedImm32(op3), TrustedImm32(op4));
</ins><span class="cx">     return appendCallWithExceptionCheck(operation);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -525,7 +525,7 @@
</span><span class="cx"> void JIT::emit_op_push_name_scope(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx">     emitGetVirtualRegister(currentInstruction[2].u.operand, regT0);
</span><del>-    callOperation(operationPushNameScope, &amp;m_codeBlock-&gt;identifier(currentInstruction[1].u.operand), regT0, currentInstruction[3].u.operand);
</del><ins>+    callOperation(operationPushNameScope, &amp;m_codeBlock-&gt;identifier(currentInstruction[1].u.operand), regT0, currentInstruction[3].u.operand, currentInstruction[4].u.operand);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JIT::emit_op_catch(Instruction* currentInstruction)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodes32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -805,7 +805,7 @@
</span><span class="cx"> void JIT::emit_op_push_name_scope(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx">     emitLoad(currentInstruction[2].u.operand, regT1, regT0);
</span><del>-    callOperation(operationPushNameScope, &amp;m_codeBlock-&gt;identifier(currentInstruction[1].u.operand), regT1, regT0, currentInstruction[3].u.operand);
</del><ins>+    callOperation(operationPushNameScope, &amp;m_codeBlock-&gt;identifier(currentInstruction[1].u.operand), regT1, regT0, currentInstruction[3].u.operand, currentInstruction[4].u.operand);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JIT::emit_op_catch(Instruction* currentInstruction)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -1308,12 +1308,13 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void JIT_OPERATION operationPushNameScope(ExecState* exec, Identifier* identifier, EncodedJSValue encodedValue, int32_t attibutes)
</del><ins>+void JIT_OPERATION operationPushNameScope(ExecState* exec, Identifier* identifier, EncodedJSValue encodedValue, int32_t attibutes, int32_t type)
</ins><span class="cx"> {
</span><span class="cx">     VM&amp; vm = exec-&gt;vm();
</span><span class="cx">     NativeCallFrameTracer tracer(&amp;vm, exec);
</span><span class="cx"> 
</span><del>-    JSNameScope* scope = JSNameScope::create(exec, *identifier, JSValue::decode(encodedValue), attibutes);
</del><ins>+    JSNameScope::Type scopeType = static_cast&lt;JSNameScope::Type&gt;(type);
+    JSNameScope* scope = JSNameScope::create(exec, *identifier, JSValue::decode(encodedValue), attibutes, scopeType);
</ins><span class="cx"> 
</span><span class="cx">     exec-&gt;setScope(scope);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx"> typedef void JIT_OPERATION (*V_JITOperation_ECPSPS)(ExecState*, JSCell*, void*, size_t, void*, size_t);
</span><span class="cx"> typedef void JIT_OPERATION (*V_JITOperation_ECZ)(ExecState*, JSCell*, int32_t);
</span><span class="cx"> typedef void JIT_OPERATION (*V_JITOperation_ECC)(ExecState*, JSCell*, JSCell*);
</span><del>-typedef void JIT_OPERATION (*V_JITOperation_EIdJZ)(ExecState*, Identifier*, EncodedJSValue, int32_t);
</del><ins>+typedef void JIT_OPERATION (*V_JITOperation_EIdJZZ)(ExecState*, Identifier*, EncodedJSValue, int32_t, int32_t);
</ins><span class="cx"> typedef void JIT_OPERATION (*V_JITOperation_EJ)(ExecState*, EncodedJSValue);
</span><span class="cx"> typedef void JIT_OPERATION (*V_JITOperation_EJCI)(ExecState*, EncodedJSValue, JSCell*, StringImpl*);
</span><span class="cx"> typedef void JIT_OPERATION (*V_JITOperation_EJIdJJ)(ExecState*, EncodedJSValue, Identifier*, EncodedJSValue, EncodedJSValue);
</span><span class="lines">@@ -277,7 +277,7 @@
</span><span class="cx"> #else
</span><span class="cx"> void JIT_OPERATION operationPutGetterSetter(ExecState*, JSCell*, Identifier*, JSCell*, JSCell*) WTF_INTERNAL;
</span><span class="cx"> #endif
</span><del>-void JIT_OPERATION operationPushNameScope(ExecState*, Identifier*, EncodedJSValue, int32_t) WTF_INTERNAL;
</del><ins>+void JIT_OPERATION operationPushNameScope(ExecState*, Identifier*, EncodedJSValue, int32_t, int32_t) WTF_INTERNAL;
</ins><span class="cx"> void JIT_OPERATION operationPushWithScope(ExecState*, EncodedJSValue) WTF_INTERNAL;
</span><span class="cx"> void JIT_OPERATION operationPopScope(ExecState*) WTF_INTERNAL;
</span><span class="cx"> void JIT_OPERATION operationProfileDidCall(ExecState*, EncodedJSValue) WTF_INTERNAL;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -1300,7 +1300,8 @@
</span><span class="cx"> {
</span><span class="cx">     LLINT_BEGIN();
</span><span class="cx">     CodeBlock* codeBlock = exec-&gt;codeBlock();
</span><del>-    JSNameScope* scope = JSNameScope::create(exec, codeBlock-&gt;identifier(pc[1].u.operand), LLINT_OP(2).jsValue(), pc[3].u.operand);
</del><ins>+    JSNameScope::Type type = static_cast&lt;JSNameScope::Type&gt;(pc[4].u.operand);
+    JSNameScope* scope = JSNameScope::create(exec, codeBlock-&gt;identifier(pc[1].u.operand), LLINT_OP(2).jsValue(), pc[3].u.operand, type);
</ins><span class="cx">     exec-&gt;setScope(scope);
</span><span class="cx">     LLINT_END();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -1246,7 +1246,7 @@
</span><span class="cx"> _llint_op_push_name_scope:
</span><span class="cx">     traceExecution()
</span><span class="cx">     callSlowPath(_llint_slow_path_push_name_scope)
</span><del>-    dispatch(4)
</del><ins>+    dispatch(5)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> _llint_op_throw:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSFunctioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSFunction.cpp (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/runtime/JSFunction.cpp        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -116,7 +116,7 @@
</span><span class="cx">         return;
</span><span class="cx">     if (!functionNameScopeIsDynamic(executable-&gt;usesEval(), executable-&gt;isStrictMode()))
</span><span class="cx">         return;
</span><del>-    setScope(vm, JSNameScope::create(vm, scope()-&gt;globalObject(), executable-&gt;name(), this, ReadOnly | DontDelete, scope()));
</del><ins>+    setScope(vm, JSNameScope::create(vm, scope()-&gt;globalObject(), executable-&gt;name(), this, ReadOnly | DontDelete, scope(), JSNameScope::FunctionNameScope));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSFunction* JSFunction::createBuiltinFunction(VM&amp; vm, FunctionExecutable* executable, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSNameScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSNameScope.h (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSNameScope.h        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/JavaScriptCore/runtime/JSNameScope.h        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -36,17 +36,22 @@
</span><span class="cx"> public:
</span><span class="cx">     typedef JSEnvironmentRecord Base;
</span><span class="cx"> 
</span><del>-    static JSNameScope* create(ExecState* exec, const Identifier&amp; identifier, JSValue value, unsigned attributes)
</del><ins>+    enum Type {
+        CatchScope,
+        FunctionNameScope
+    };
+
+    static JSNameScope* create(ExecState* exec, const Identifier&amp; identifier, JSValue value, unsigned attributes, Type type)
</ins><span class="cx">     {
</span><span class="cx">         VM&amp; vm = exec-&gt;vm();
</span><del>-        JSNameScope* scopeObject = new (NotNull, allocateCell&lt;JSNameScope&gt;(vm.heap)) JSNameScope(vm, exec-&gt;lexicalGlobalObject(), exec-&gt;scope());
</del><ins>+        JSNameScope* scopeObject = new (NotNull, allocateCell&lt;JSNameScope&gt;(vm.heap)) JSNameScope(vm, exec-&gt;lexicalGlobalObject(), exec-&gt;scope(), type);
</ins><span class="cx">         scopeObject-&gt;finishCreation(vm, identifier, value, attributes);
</span><span class="cx">         return scopeObject;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static JSNameScope* create(VM&amp; vm, JSGlobalObject* globalObject, const Identifier&amp; identifier, JSValue value, unsigned attributes, JSScope* next)
</del><ins>+    static JSNameScope* create(VM&amp; vm, JSGlobalObject* globalObject, const Identifier&amp; identifier, JSValue value, unsigned attributes, JSScope* next, Type type)
</ins><span class="cx">     {
</span><del>-        JSNameScope* scopeObject = new (NotNull, allocateCell&lt;JSNameScope&gt;(vm.heap)) JSNameScope(vm, globalObject, next);
</del><ins>+        JSNameScope* scopeObject = new (NotNull, allocateCell&lt;JSNameScope&gt;(vm.heap)) JSNameScope(vm, globalObject, next, type);
</ins><span class="cx">         scopeObject-&gt;finishCreation(vm, identifier, value, attributes);
</span><span class="cx">         return scopeObject;
</span><span class="cx">     }
</span><span class="lines">@@ -60,6 +65,9 @@
</span><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><ins>+    bool isFunctionNameScope() { return m_type == FunctionNameScope; }
+    bool isCatchScope() { return m_type == CatchScope; }
+
</ins><span class="cx"> protected:
</span><span class="cx">     void finishCreation(VM&amp; vm, const Identifier&amp; identifier, JSValue value, unsigned attributes)
</span><span class="cx">     {
</span><span class="lines">@@ -71,17 +79,19 @@
</span><span class="cx">     static const unsigned StructureFlags = OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    JSNameScope(VM&amp; vm, JSGlobalObject* globalObject, JSScope* next)
</del><ins>+    JSNameScope(VM&amp; vm, JSGlobalObject* globalObject, JSScope* next, Type type)
</ins><span class="cx">         : Base(
</span><span class="cx">             vm,
</span><span class="cx">             globalObject-&gt;nameScopeStructure(),
</span><span class="cx">             reinterpret_cast&lt;Register*&gt;(&amp;m_registerStore + 1),
</span><span class="cx">             next
</span><span class="cx">         )
</span><ins>+        , m_type(type)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     WriteBarrier&lt;Unknown&gt; m_registerStore;
</span><ins>+    Type m_type;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/WebInspectorUI/ChangeLog        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-10-02  Mark Lam  &lt;mark.lam@apple.com&gt;
+
+        Fixed the Inspector to be able to properly distinguish between scope types.
+        &lt;https://webkit.org/b/137279&gt;
+
+        Reviewed by Geoffrey Garen and Joseph Pecoraro.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        * UserInterface/Controllers/DebuggerManager.js:
+        * UserInterface/Models/ScopeChainNode.js:
+        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
+        - Added handling of the FunctionNameScope case.
+
</ins><span class="cx"> 2014-10-02  Andres Gomez  &lt;agomez@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: [GTK] Missing icons and enhancing the proportion and visibility of some icons
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -214,6 +214,7 @@
</span><span class="cx"> localizedStrings[&quot;Frames&quot;] = &quot;Frames&quot;;
</span><span class="cx"> localizedStrings[&quot;Full URL&quot;] = &quot;Full URL&quot;;
</span><span class="cx"> localizedStrings[&quot;Function&quot;] = &quot;Function&quot;;
</span><ins>+localizedStrings[&quot;Function Name Variable&quot;] = &quot;Function Name Variable&quot;;
</ins><span class="cx"> localizedStrings[&quot;Global Variables&quot;] = &quot;Global Variables&quot;;
</span><span class="cx"> localizedStrings[&quot;Grammar&quot;] = &quot;Grammar&quot;;
</span><span class="cx"> localizedStrings[&quot;HTML Attributes&quot;] = &quot;HTML Attributes&quot;;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersDebuggerManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -572,6 +572,9 @@
</span><span class="cx">         case &quot;catch&quot;:
</span><span class="cx">             type = WebInspector.ScopeChainNode.Type.Catch;
</span><span class="cx">             break;
</span><ins>+        case &quot;functionName&quot;:
+            type = WebInspector.ScopeChainNode.Type.FunctionName;
+            break;
</ins><span class="cx">         default:
</span><span class="cx">             console.error(&quot;Unknown type: &quot; + payload.type);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsScopeChainNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -42,7 +42,8 @@
</span><span class="cx">     Global: &quot;scope-chain-type-global&quot;,
</span><span class="cx">     With: &quot;scope-chain-type-with&quot;,
</span><span class="cx">     Closure: &quot;scope-chain-type-closure&quot;,
</span><del>-    Catch: &quot;scope-chain-type-catch&quot;
</del><ins>+    Catch: &quot;scope-chain-type-catch&quot;,
+    FunctionName: &quot;scope-chain-type-functionName&quot;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector.ScopeChainNode.prototype = {
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsScopeChainDetailsSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js (174215 => 174216)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js        2014-10-02 13:06:54 UTC (rev 174215)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js        2014-10-02 15:15:03 UTC (rev 174216)
</span><span class="lines">@@ -121,6 +121,12 @@
</span><span class="cx">                     collapsedByDefault = false;
</span><span class="cx">                     break;
</span><span class="cx"> 
</span><ins>+                case WebInspector.ScopeChainNode.Type.FunctionName:
+                    title = WebInspector.UIString(&quot;Function Name Variable&quot;);
+                    dontHighlightNonEnumerableProperties = true;
+                    collapsedByDefault = true;
+                    break;
+
</ins><span class="cx">                 case WebInspector.ScopeChainNode.Type.With:
</span><span class="cx">                     title = WebInspector.UIString(&quot;With Object Properties&quot;);
</span><span class="cx">                     collapsedByDefault = foundLocalScope;
</span></span></pre>
</div>
</div>

</body>
</html>