Diff
Modified: trunk/LayoutTests/ChangeLog (202683 => 202684)
--- trunk/LayoutTests/ChangeLog 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/LayoutTests/ChangeLog 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,3 +1,18 @@
+2016-06-30 Commit Queue <commit-qu...@webkit.org>
+
+ Unreviewed, rolling out r202659.
+ https://bugs.webkit.org/show_bug.cgi?id=159305
+
+ The test for this change times out on mac-wk2 debug and caused
+ an existing test to crash. (Requested by ryanhaddad on
+ #webkit).
+
+ Reverted changeset:
+
+ "Web Inspector: Wrong function name next to scope"
+ https://bugs.webkit.org/show_bug.cgi?id=158210
+ http://trac.webkit.org/changeset/202659
+
2016-06-30 Benjamin Poulain <bpoul...@apple.com>
[JSC] Date.setYear() misses timeClip()
Deleted: trunk/LayoutTests/inspector/debugger/paused-scopes-expected.txt (202683 => 202684)
--- trunk/LayoutTests/inspector/debugger/paused-scopes-expected.txt 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/LayoutTests/inspector/debugger/paused-scopes-expected.txt 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,205 +0,0 @@
-Check scope chains for different call frames at different pauses.
-
-
-== Running test suite: PausedCallFrameScope
--- Running test case: TriggerFirstPause
-CALLFRAME: firstPause
-
----- Scope Chain ----
- SCOPE: Name (firstPause) - Type (Block) - Hash (firstPause:<sourceID>:21:29)
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:21:29)
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:21:29)
- - barVarVariable1
- SCOPE: Name (firstPause) - Type (FunctionName) - Hash (firstPause:<sourceID>:21:29)
- - firstPause
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - fooLexicalVariable2
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (firstPause) - Type (Block) - Hash (firstPause:<sourceID>:21:29)
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (Local) - Hash (firstPause:<sourceID>:21:29)
- - barVarVariable1
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (FunctionName) - Hash (firstPause:<sourceID>:21:29)
- - firstPause
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- - fooLexicalVariable2
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-CALLFRAME: firstPause
-
----- Scope Chain ----
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - fooLexicalVariable2
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (firstPause) - Type (Local) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- - fooLexicalVariable2
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-CALLFRAME: entry
-
----- Scope Chain ----
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - fooLexicalVariable2
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (entry) - Type (Local) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- - fooLexicalVariable2
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-
--- Running test case: TriggerSecondPause
-CALLFRAME: secondPause
-
----- Scope Chain ----
- SCOPE: Name (secondPause) - Type (Block) - Hash (secondPause:<sourceID>:6:21)
- - blockLexicalVariable
- SCOPE: Name (secondPause) - Type (Closure) - Hash (secondPause:<sourceID>:6:21)
- - shoeLexicalVariable1
- SCOPE: Name (secondPause) - Type (Closure) - Hash (secondPause:<sourceID>:6:21)
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (secondPause) - Type (Block) - Hash (secondPause:<sourceID>:6:21)
- - blockLexicalVariable
- SCOPE: Name (secondPause) - Type (Local) - Hash (secondPause:<sourceID>:6:21)
- - shoeLexicalVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-CALLFRAME: firstPause
-
----- Scope Chain ----
- SCOPE: Name (firstPause) - Type (Block) - Hash (firstPause:<sourceID>:21:29)
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:21:29)
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:21:29)
- - barVarVariable1
- SCOPE: Name (firstPause) - Type (FunctionName) - Hash (firstPause:<sourceID>:21:29)
- - firstPause
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - fooLexicalVariable2
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (firstPause) - Type (Block) - Hash (firstPause:<sourceID>:21:29)
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (Local) - Hash (firstPause:<sourceID>:21:29)
- - barVarVariable1
- - barLexicalVariable2
- SCOPE: Name (firstPause) - Type (FunctionName) - Hash (firstPause:<sourceID>:21:29)
- - firstPause
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- - fooLexicalVariable2
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-CALLFRAME: firstPause
-
----- Scope Chain ----
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (firstPause) - Type (Closure) - Hash (firstPause:<sourceID>:19:24)
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - fooLexicalVariable2
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (firstPause) - Type (Local) - Hash (firstPause:<sourceID>:19:24)
- - fakeFirstPauseLexicalVariable
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- - fooLexicalVariable2
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-CALLFRAME: entry
-
----- Scope Chain ----
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - fooLexicalVariable2
- SCOPE: Name (entry) - Type (Closure) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
----- Merged Scope Chain ----
- SCOPE: Name (entry) - Type (Local) - Hash (entry:<sourceID>:14:15)
- - firstPause
- - fooVarVariable1
- - fooLexicalVariable2
- SCOPE: Name () - Type (GlobalLexicalEnvironment) - Hash ()
- - globalLet2
- SCOPE: Name () - Type (Global) - Hash ()
-
-
Deleted: trunk/LayoutTests/inspector/debugger/paused-scopes.html (202683 => 202684)
--- trunk/LayoutTests/inspector/debugger/paused-scopes.html 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/LayoutTests/inspector/debugger/paused-scopes.html 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,118 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src=""
-<script src=""
-<script>
-
-function test()
-{
- function scopeTypeName(type) {
- switch (type) {
- case WebInspector.ScopeChainNode.Type.Local: return "Local";
- case WebInspector.ScopeChainNode.Type.Global: return "Global";
- case WebInspector.ScopeChainNode.Type.GlobalLexicalEnvironment: return "GlobalLexicalEnvironment";
- case WebInspector.ScopeChainNode.Type.With: return "With";
- case WebInspector.ScopeChainNode.Type.Closure: return "Closure";
- case WebInspector.ScopeChainNode.Type.Catch: return "Catch";
- case WebInspector.ScopeChainNode.Type.FunctionName: return "FunctionName";
- case WebInspector.ScopeChainNode.Type.Block: return "Block";
- default: return "Unknown!";
- };
- }
-
- function sanitizeHash(hash) {
- return hash.replace(/:(.*?):/, ":<sourceID>:");
- }
-
- function collectScopeChainProperties(scopeChain) {
- let scopeChainData = [];
-
- let promises = [];
- for (let scope of scopeChain) {
- let data = "" properties: []};
- scopeChainData.push(data);
- if (scope.type === WebInspector.ScopeChainNode.Type.Global)
- continue;
-
- for (let scopeObject of scope.objects) {
- promises.push(new Promise((resolve, reject) => {
- scopeObject.getAllPropertyDescriptors((propertyDescriptors) => {
- data.properties = data.properties.concat(propertyDescriptors);
- resolve();
- });
- }));
- }
- }
-
- return Promise.all(promises)
- .then(() => scopeChainData);
- }
-
- function dumpScopeChainData(scopeChainData) {
- for (let {scope, properties} of scopeChainData) {
- InspectorTest.log(` SCOPE: Name (${scope.name}) - Type (${scopeTypeName(scope.type)}) - Hash (${sanitizeHash(scope.hash)})`);
- for (let propertyDescriptor of properties)
- InspectorTest.log(` - ${propertyDescriptor.name}`);
- }
- }
-
- function dumpCallFrame(callFrame) {
- return Promise.all([
- collectScopeChainProperties(callFrame.scopeChain),
- collectScopeChainProperties(callFrame.mergedScopeChain()),
- ]).then((results) => {
- let [scopeChainData, mergedScopeChainData] = results;
- InspectorTest.log(`CALLFRAME: ${callFrame.functionName}`);
- InspectorTest.log("\n---- Scope Chain ----");
- dumpScopeChainData(scopeChainData);
- InspectorTest.log("\n---- Merged Scope Chain ----");
- dumpScopeChainData(mergedScopeChainData);
- InspectorTest.log("");
- });
- }
-
- function dumpCallFrames() {
- let callFrames = WebInspector.debuggerManager.callFrames;
- let chain = Promise.resolve();
- for (let callFrame of callFrames)
- chain = chain.then(() => dumpCallFrame(callFrame));
- return chain;
- }
-
-
- let suite = InspectorTest.createAsyncSuite("PausedCallFrameScope");
-
- suite.addTestCase({
- name: "TriggerFirstPause",
- description: "Verify CallFrames and Scopes with the first pause.",
- test: (resolve, reject) => {
- InspectorTest.evaluateInPage("setTimeout(entry)");
- WebInspector.debuggerManager.singleFireEventListener(WebInspector.DebuggerManager.Event.CallFramesDidChange, (event) => {
- dumpCallFrames().then(resolve, reject);
- });
- }
- });
-
- suite.addTestCase({
- name: "TriggerSecondPause",
- description: "Verify CallFrames and Scopes with the first pause.",
- test: (resolve, reject) => {
- WebInspector.debuggerManager.resume();
- WebInspector.debuggerManager.singleFireEventListener(WebInspector.DebuggerManager.Event.CallFramesDidChange, (event) => {
- dumpCallFrames().then(() => {
- WebInspector.debuggerManager.resume();
- resolve();
- }, reject);
- });
- }
- });
-
- suite.runTestCasesAndFinish();
-}
-</script>
-</head>
-<body _onload_="runTest()">
-<p>Check scope chains for different call frames at different pauses.</p>
-</body>
-</html>
Deleted: trunk/LayoutTests/inspector/debugger/resources/paused-scopes.js (202683 => 202684)
--- trunk/LayoutTests/inspector/debugger/resources/paused-scopes.js 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/LayoutTests/inspector/debugger/resources/paused-scopes.js 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,31 +0,0 @@
-"use strict";
-
-var globalVar1; // Global (globalVar1)
-let globalLet2; // GlobalLexicalEnvironment (globalLet2)
-
-function secondPause() { // Global (secondPause)
- let shoeLexicalVariable1 = document; // ClosureScope (shoeLexicalVariable1)
- if (true) {
- let blockLexicalVariable = "block"; // NestedBlockScope (blockLexicalVariable)
- debugger;
- }
-}
-
-function entry() { // Global (entry)
- var fooVarVariable1; // foo ClosureScope (fooVarVariable1)
- let fooLexicalVariable2; // foo ClosureScope (fooLexicalVariable2)
- firstPause();
-
- function firstPause() { // foo ClosureScope (firstPause)
- let fakeFirstPauseLexicalVariable; // firstPause ClosureScope (fakeFirstPauseLexicalVariable)
- (function firstPause() {
- var barVarVariable1 = window.navigator; // firstPause ClosureScope (barVarVariable1)
- let barLexicalVariable2 = window.navigator; // firstPause ClosureScope (barLexicalVariable2)
- if (true) {
- let barLexicalVariable2 = window.navigator; // NestedBlockScope (barLexicalVariable2)
- debugger;
- secondPause();
- }
- })();
- }
-}
Modified: trunk/Source/_javascript_Core/CMakeLists.txt (202683 => 202684)
--- trunk/Source/_javascript_Core/CMakeLists.txt 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/CMakeLists.txt 2016-06-30 17:31:23 UTC (rev 202684)
@@ -239,7 +239,6 @@
debugger/Debugger.cpp
debugger/DebuggerCallFrame.cpp
- debugger/DebuggerLocation.cpp
debugger/DebuggerScope.cpp
dfg/DFGAbstractHeap.cpp
Modified: trunk/Source/_javascript_Core/ChangeLog (202683 => 202684)
--- trunk/Source/_javascript_Core/ChangeLog 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/ChangeLog 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,3 +1,18 @@
+2016-06-30 Commit Queue <commit-qu...@webkit.org>
+
+ Unreviewed, rolling out r202659.
+ https://bugs.webkit.org/show_bug.cgi?id=159305
+
+ The test for this change times out on mac-wk2 debug and caused
+ an existing test to crash. (Requested by ryanhaddad on
+ #webkit).
+
+ Reverted changeset:
+
+ "Web Inspector: Wrong function name next to scope"
+ https://bugs.webkit.org/show_bug.cgi?id=158210
+ http://trac.webkit.org/changeset/202659
+
2016-06-30 Benjamin Poulain <bpoul...@apple.com>
[JSC] Date.setYear() misses timeClip()
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (202683 => 202684)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1645,8 +1645,6 @@
A5EF9B171A1D440300702E90 /* generate_cpp_frontend_dispatcher_implementation.py in Headers */ = {isa = PBXBuildFile; fileRef = C4F4B6D41A05C76F005CAB76 /* generate_cpp_frontend_dispatcher_implementation.py */; settings = {ATTRIBUTES = (Private, ); }; };
A5EF9B181A1D440600702E90 /* generate_cpp_protocol_types_header.py in Headers */ = {isa = PBXBuildFile; fileRef = C4F4B6D51A05C76F005CAB76 /* generate_cpp_protocol_types_header.py */; settings = {ATTRIBUTES = (Private, ); }; };
A5EF9B191A1D440700702E90 /* generate_cpp_protocol_types_implementation.py in Headers */ = {isa = PBXBuildFile; fileRef = C4F4B6D61A05C76F005CAB76 /* generate_cpp_protocol_types_implementation.py */; settings = {ATTRIBUTES = (Private, ); }; };
- A5FC84B21D1DDAD6006B5C46 /* DebuggerLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FC84B11D1DDAC8006B5C46 /* DebuggerLocation.h */; };
- A5FC84B31D1DDAD9006B5C46 /* DebuggerLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5FC84B01D1DDAC8006B5C46 /* DebuggerLocation.cpp */; };
A5FD0067189AFE9C00633231 /* ScriptArguments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5FD0065189AFE9C00633231 /* ScriptArguments.cpp */; };
A5FD0068189AFE9C00633231 /* ScriptArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FD0066189AFE9C00633231 /* ScriptArguments.h */; settings = {ATTRIBUTES = (Private, ); }; };
A5FD006D189B00AA00633231 /* ScriptCallFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5FD0069189B00A900633231 /* ScriptCallFrame.cpp */; };
@@ -3869,8 +3867,6 @@
A5EA70F619F6DE5A0098F5EC /* generate_objc_internal_header.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = generate_objc_internal_header.py; sourceTree = "<group>"; };
A5EA70F819F6DE5A0098F5EC /* objc_generator.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = objc_generator.py; sourceTree = "<group>"; };
A5EA710D19F6DF810098F5EC /* InspectorAlternateBackendDispatchers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorAlternateBackendDispatchers.h; sourceTree = "<group>"; };
- A5FC84B01D1DDAC8006B5C46 /* DebuggerLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebuggerLocation.cpp; sourceTree = "<group>"; };
- A5FC84B11D1DDAC8006B5C46 /* DebuggerLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerLocation.h; sourceTree = "<group>"; };
A5FD0065189AFE9C00633231 /* ScriptArguments.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptArguments.cpp; sourceTree = "<group>"; };
A5FD0066189AFE9C00633231 /* ScriptArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptArguments.h; sourceTree = "<group>"; };
A5FD0069189B00A900633231 /* ScriptCallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptCallFrame.cpp; sourceTree = "<group>"; };
@@ -5348,8 +5344,6 @@
149559ED0DDCDDF700648087 /* DebuggerCallFrame.cpp */,
1480DB9B0DDC227F003CFDF2 /* DebuggerCallFrame.h */,
6AD2CB4C19B9140100065719 /* DebuggerEvalEnabler.h */,
- A5FC84B01D1DDAC8006B5C46 /* DebuggerLocation.cpp */,
- A5FC84B11D1DDAC8006B5C46 /* DebuggerLocation.h */,
FEA0861F182B7A0400F6D851 /* DebuggerPrimitives.h */,
0F2D4DDB19832D34007D4B19 /* DebuggerScope.cpp */,
0F2D4DDC19832D34007D4B19 /* DebuggerScope.h */,
@@ -7701,7 +7695,6 @@
996B731C1BDA08DD00331B84 /* JSDataViewPrototype.lut.h in Headers */,
978801411471AD920041B016 /* JSDateMath.h in Headers */,
C2A7F688160432D400F76B98 /* JSDestructibleObject.h in Headers */,
- A5FC84B21D1DDAD6006B5C46 /* DebuggerLocation.h in Headers */,
FE384EE61ADDB7AD0055DE2C /* JSDollarVM.h in Headers */,
FE384EE81ADDB7AD0055DE2C /* JSDollarVMPrototype.h in Headers */,
BC18C42D0E16F5CD00B34460 /* JSEnvironmentRecord.h in Headers */,
@@ -8781,7 +8774,6 @@
A57D23F11891B5B40031C7FA /* ContentSearchUtilities.cpp in Sources */,
52B717B51A0597E1007AF4F3 /* ControlFlowProfiler.cpp in Sources */,
0FBADF541BD1F4B800E073C1 /* CopiedBlock.cpp in Sources */,
- A5FC84B31D1DDAD9006B5C46 /* DebuggerLocation.cpp in Sources */,
C240305514B404E60079EB64 /* CopiedSpace.cpp in Sources */,
0F6183301C45BF070072450B /* AirLowerMacros.cpp in Sources */,
C2239D1716262BDD005AC5FD /* CopyVisitor.cpp in Sources */,
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -2479,12 +2479,7 @@
ConcurrentJITLocker locker(symbolTable->m_lock);
symbolTable->prepareForTypeProfiling(locker);
}
-
- SymbolTable* clone = symbolTable->cloneScopePart(*m_vm);
- if (wasCompiledWithDebuggingOpcodes())
- clone->setRareDataCodeBlock(this);
-
- constant = clone;
+ constant = symbolTable->cloneScopePart(*m_vm);
}
}
Deleted: trunk/Source/_javascript_Core/debugger/DebuggerLocation.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/debugger/DebuggerLocation.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/debugger/DebuggerLocation.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "DebuggerLocation.h"
-
-#include "Executable.h"
-
-namespace JSC {
-
-DebuggerLocation::DebuggerLocation(ScriptExecutable* executable)
-{
- if (executable->isHostFunction())
- return;
-
- sourceID = executable->sourceID();
- line = executable->firstLine();
- column = executable->startColumn();
- url = ""
- if (url.isEmpty())
- url = ""
-}
-
-} // namespace JSC
Deleted: trunk/Source/_javascript_Core/debugger/DebuggerLocation.h (202683 => 202684)
--- trunk/Source/_javascript_Core/debugger/DebuggerLocation.h 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/debugger/DebuggerLocation.h 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "DebuggerPrimitives.h"
-#include <wtf/text/WTFString.h>
-
-namespace JSC {
-
-class ScriptExecutable;
-
-struct DebuggerLocation {
-
- DebuggerLocation() { }
- DebuggerLocation(const String& url, intptr_t sourceID, unsigned line, unsigned column)
- : url(url)
- , sourceID(sourceID)
- , line(line)
- , column(column)
- { }
-
- DebuggerLocation(ScriptExecutable*);
-
- String url;
- intptr_t sourceID { noSourceID };
- unsigned line { 0 };
- unsigned column { 0 };
-};
-
-} // namespace JSC
Modified: trunk/Source/_javascript_Core/debugger/DebuggerScope.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/debugger/DebuggerScope.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/debugger/DebuggerScope.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -210,33 +210,6 @@
return m_scope->isNestedLexicalScope();
}
-String DebuggerScope::name() const
-{
- SymbolTable* symbolTable = m_scope->symbolTable();
- if (!symbolTable)
- return String();
-
- CodeBlock* codeBlock = symbolTable->rareDataCodeBlock();
- if (!codeBlock)
- return String();
-
- return String::fromUTF8(codeBlock->inferredName());
-}
-
-DebuggerLocation DebuggerScope::location() const
-{
- SymbolTable* symbolTable = m_scope->symbolTable();
- if (!symbolTable)
- return DebuggerLocation();
-
- CodeBlock* codeBlock = symbolTable->rareDataCodeBlock();
- if (!codeBlock)
- return DebuggerLocation();
-
- ScriptExecutable* executable = codeBlock->ownerScriptExecutable();
- return DebuggerLocation(executable);
-}
-
JSValue DebuggerScope::caughtValue(ExecState* exec) const
{
ASSERT(isCatchScope());
Modified: trunk/Source/_javascript_Core/debugger/DebuggerScope.h (202683 => 202684)
--- trunk/Source/_javascript_Core/debugger/DebuggerScope.h 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/debugger/DebuggerScope.h 2016-06-30 17:31:23 UTC (rev 202684)
@@ -26,7 +26,6 @@
#ifndef DebuggerScope_h
#define DebuggerScope_h
-#include "DebuggerLocation.h"
#include "JSObject.h"
namespace JSC {
@@ -89,9 +88,6 @@
bool isGlobalLexicalEnvironment() const;
bool isNestedLexicalScope() const;
- String name() const;
- DebuggerLocation location() const;
-
JSValue caughtValue(ExecState*) const;
private:
Modified: trunk/Source/_javascript_Core/inspector/InjectedScriptSource.js (202683 => 202684)
--- trunk/Source/_javascript_Core/inspector/InjectedScriptSource.js 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/inspector/InjectedScriptSource.js 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1304,11 +1304,9 @@
_wrapScopeChain: function(callFrame)
{
var scopeChain = callFrame.scopeChain;
- var scopeDescriptions = callFrame.scopeDescriptions();
-
var scopeChainProxy = [];
for (var i = 0; i < scopeChain.length; i++)
- scopeChainProxy[i] = InjectedScript.CallFrameProxy._createScopeJson(scopeChain[i], scopeDescriptions[i], "backtrace");
+ scopeChainProxy[i] = InjectedScript.CallFrameProxy._createScopeJson(callFrame.scopeType(i), scopeChain[i], "backtrace");
return scopeChainProxy;
}
}
@@ -1321,21 +1319,14 @@
4: "functionName", // FUNCTION_NAME_SCOPE
5: "globalLexicalEnvironment", // GLOBAL_LEXICAL_ENVIRONMENT_SCOPE
6: "nestedLexical", // NESTED_LEXICAL_SCOPE
-};
+}
-InjectedScript.CallFrameProxy._createScopeJson = function(object, {name, type, location}, groupId)
+InjectedScript.CallFrameProxy._createScopeJson = function(scopeTypeCode, scopeObject, groupId)
{
- var scope = {
- object: injectedScript._wrapObject(object, groupId),
- type: InjectedScript.CallFrameProxy._scopeTypeNames[type],
+ return {
+ object: injectedScript._wrapObject(scopeObject, groupId),
+ type: InjectedScript.CallFrameProxy._scopeTypeNames[scopeTypeCode]
};
-
- if (name)
- scope.name = name;
- if (location)
- scope.location = location;
-
- return scope;
}
Modified: trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFrame.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFrame.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFrame.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -28,11 +28,9 @@
#include "DebuggerScope.h"
#include "Error.h"
-#include "IdentifierInlines.h"
#include "JSCJSValue.h"
#include "JSCellInlines.h"
#include "JSJavaScriptCallFramePrototype.h"
-#include "ObjectConstructor.h"
#include "StructureInlines.h"
using namespace JSC;
@@ -94,58 +92,45 @@
return result;
}
-static JSValue valueForScopeType(DebuggerScope* scope)
+JSValue JSJavaScriptCallFrame::scopeType(ExecState* exec)
{
- if (scope->isCatchScope())
- return jsNumber(JSJavaScriptCallFrame::CATCH_SCOPE);
- if (scope->isFunctionNameScope())
- return jsNumber(JSJavaScriptCallFrame::FUNCTION_NAME_SCOPE);
- if (scope->isWithScope())
- return jsNumber(JSJavaScriptCallFrame::WITH_SCOPE);
- if (scope->isNestedLexicalScope())
- return jsNumber(JSJavaScriptCallFrame::NESTED_LEXICAL_SCOPE);
- if (scope->isGlobalLexicalEnvironment())
- return jsNumber(JSJavaScriptCallFrame::GLOBAL_LEXICAL_ENVIRONMENT_SCOPE);
- if (scope->isGlobalScope())
- return jsNumber(JSJavaScriptCallFrame::GLOBAL_SCOPE);
+ if (!impl().scopeChain())
+ return jsUndefined();
- ASSERT(scope->isClosureScope());
- return jsNumber(JSJavaScriptCallFrame::CLOSURE_SCOPE);
-}
+ if (!exec->argument(0).isInt32())
+ return jsUndefined();
+ int index = exec->argument(0).asInt32();
-static JSValue valueForScopeLocation(ExecState* exec, const DebuggerLocation& location)
-{
- if (location.sourceID == noSourceID)
- return jsNull();
-
- // Debugger.Location protocol object.
- JSObject* result = constructEmptyObject(exec);
- result->putDirect(exec->vm(), Identifier::fromString(exec, "scriptId"), jsString(exec, String::number(location.sourceID)));
- result->putDirect(exec->vm(), Identifier::fromString(exec, "lineNumber"), jsNumber(location.line));
- result->putDirect(exec->vm(), Identifier::fromString(exec, "columnNumber"), jsNumber(location.column));
- return result;
-}
-
-JSValue JSJavaScriptCallFrame::scopeDescriptions(ExecState* exec)
-{
DebuggerScope* scopeChain = impl().scopeChain();
- if (!scopeChain)
- return jsUndefined();
+ DebuggerScope::iterator end = scopeChain->end();
- int index = 0;
- JSArray* array = constructEmptyArray(exec, nullptr);
-
- DebuggerScope::iterator end = scopeChain->end();
for (DebuggerScope::iterator iter = scopeChain->begin(); iter != end; ++iter) {
DebuggerScope* scope = iter.get();
- JSObject* description = constructEmptyObject(exec);
- description->putDirect(exec->vm(), Identifier::fromString(exec, "type"), valueForScopeType(scope));
- description->putDirect(exec->vm(), Identifier::fromString(exec, "name"), jsString(exec, scope->name()));
- description->putDirect(exec->vm(), Identifier::fromString(exec, "location"), valueForScopeLocation(exec, scope->location()));
- array->putDirectIndex(exec, index++, description);
+
+ if (!index) {
+ if (scope->isCatchScope())
+ return jsNumber(JSJavaScriptCallFrame::CATCH_SCOPE);
+ if (scope->isFunctionNameScope())
+ return jsNumber(JSJavaScriptCallFrame::FUNCTION_NAME_SCOPE);
+ if (scope->isWithScope())
+ return jsNumber(JSJavaScriptCallFrame::WITH_SCOPE);
+ if (scope->isNestedLexicalScope())
+ return jsNumber(JSJavaScriptCallFrame::NESTED_LEXICAL_SCOPE);
+ if (scope->isGlobalLexicalEnvironment())
+ return jsNumber(JSJavaScriptCallFrame::GLOBAL_LEXICAL_ENVIRONMENT_SCOPE);
+ if (scope->isGlobalScope()) {
+ ASSERT(++iter == end);
+ return jsNumber(JSJavaScriptCallFrame::GLOBAL_SCOPE);
+ }
+ ASSERT(scope->isClosureScope());
+ return jsNumber(JSJavaScriptCallFrame::CLOSURE_SCOPE);
+ }
+
+ --index;
}
- return array;
+ ASSERT_NOT_REACHED();
+ return jsUndefined();
}
JSValue JSJavaScriptCallFrame::caller(ExecState* exec) const
Modified: trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFrame.h (202683 => 202684)
--- trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFrame.h 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFrame.h 2016-06-30 17:31:23 UTC (rev 202684)
@@ -58,7 +58,7 @@
// Functions.
JSC::JSValue evaluateWithScopeExtension(JSC::ExecState*);
- JSC::JSValue scopeDescriptions(JSC::ExecState*);
+ JSC::JSValue scopeType(JSC::ExecState*);
// Attributes.
JSC::JSValue caller(JSC::ExecState*) const;
Modified: trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFramePrototype.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFramePrototype.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/inspector/JSJavaScriptCallFramePrototype.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -39,7 +39,7 @@
// Functions.
static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFramePrototypeFunctionEvaluateWithScopeExtension(ExecState*);
-static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFramePrototypeFunctionScopeDescriptions(ExecState*);
+static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFramePrototypeFunctionScopeType(ExecState*);
// Attributes.
static EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameAttributeCaller(ExecState*);
@@ -61,7 +61,7 @@
vm.prototypeMap.addPrototype(this);
JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("evaluateWithScopeExtension", jsJavaScriptCallFramePrototypeFunctionEvaluateWithScopeExtension, DontEnum, 1);
- JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("scopeDescriptions", jsJavaScriptCallFramePrototypeFunctionScopeDescriptions, DontEnum, 0);
+ JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("scopeType", jsJavaScriptCallFramePrototypeFunctionScopeType, DontEnum, 1);
JSC_NATIVE_GETTER("caller", jsJavaScriptCallFrameAttributeCaller, DontEnum | Accessor);
JSC_NATIVE_GETTER("sourceID", jsJavaScriptCallFrameAttributeSourceID, DontEnum | Accessor);
@@ -84,7 +84,7 @@
return JSValue::encode(castedThis->evaluateWithScopeExtension(exec));
}
-EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFramePrototypeFunctionScopeDescriptions(ExecState* exec)
+EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFramePrototypeFunctionScopeType(ExecState* exec)
{
JSValue thisValue = exec->thisValue();
JSJavaScriptCallFrame* castedThis = jsDynamicCast<JSJavaScriptCallFrame*>(thisValue);
@@ -91,7 +91,7 @@
if (!castedThis)
return throwVMTypeError(exec);
- return JSValue::encode(castedThis->scopeDescriptions(exec));
+ return JSValue::encode(castedThis->scopeType(exec));
}
EncodedJSValue JSC_HOST_CALL jsJavaScriptCallFrameAttributeCaller(ExecState* exec)
Modified: trunk/Source/_javascript_Core/inspector/protocol/Debugger.json (202683 => 202684)
--- trunk/Source/_javascript_Core/inspector/protocol/Debugger.json 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/inspector/protocol/Debugger.json 2016-06-30 17:31:23 UTC (rev 202684)
@@ -81,10 +81,8 @@
"id": "Scope",
"type": "object",
"properties": [
- { "name": "object", "$ref": "Runtime.RemoteObject", "description": "Object representing the scope. For <code>global</code> and <code>with</code> scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties." },
{ "name": "type", "type": "string", "enum": ["global", "with", "closure", "catch", "functionName", "globalLexicalEnvironment", "nestedLexical"], "description": "Scope type." },
- { "name": "name", "type": "string", "optional": true, "description": "Name associated with the scope." },
- { "name": "location", "$ref": "Location", "optional": true, "description": "Location if available of the scope definition." }
+ { "name": "object", "$ref": "Runtime.RemoteObject", "description": "Object representing the scope. For <code>global</code> and <code>with</code> scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties." }
],
"description": "Scope description."
},
Modified: trunk/Source/_javascript_Core/runtime/JSScope.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/runtime/JSScope.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/runtime/JSScope.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -340,12 +340,4 @@
return nullptr;
}
-SymbolTable* JSScope::symbolTable()
-{
- if (JSSymbolTableObject* symbolTableObject = jsDynamicCast<JSSymbolTableObject*>(this))
- return symbolTableObject->symbolTable();
-
- return nullptr;
-}
-
} // namespace JSC
Modified: trunk/Source/_javascript_Core/runtime/JSScope.h (202683 => 202684)
--- trunk/Source/_javascript_Core/runtime/JSScope.h 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/runtime/JSScope.h 2016-06-30 17:31:23 UTC (rev 202684)
@@ -32,9 +32,8 @@
namespace JSC {
class ScopeChainIterator;
-class SymbolTable;
+class WatchpointSet;
class VariableEnvironment;
-class WatchpointSet;
class JSScope : public JSNonFinalObject {
public:
@@ -72,8 +71,6 @@
VM* vm();
JSObject* globalThis();
- SymbolTable* symbolTable();
-
protected:
JSScope(VM&, Structure*, JSScope* next);
Modified: trunk/Source/_javascript_Core/runtime/SymbolTable.cpp (202683 => 202684)
--- trunk/Source/_javascript_Core/runtime/SymbolTable.cpp 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/runtime/SymbolTable.cpp 2016-06-30 17:31:23 UTC (rev 202684)
@@ -104,9 +104,6 @@
visitor.append(&thisSymbolTable->m_arguments);
visitor.append(&thisSymbolTable->m_singletonScope);
- if (thisSymbolTable->m_rareData)
- visitor.append(&thisSymbolTable->m_rareData->m_codeBlock);
-
// Save some memory. This is O(n) to rebuild and we do so on the fly.
ConcurrentJITLocker locker(thisSymbolTable->m_lock);
thisSymbolTable->m_localToEntry = nullptr;
@@ -162,28 +159,28 @@
if (ScopedArgumentsTable* arguments = this->arguments())
result->m_arguments.set(vm, result, arguments);
- if (m_rareData) {
- result->m_rareData = std::make_unique<SymbolTableRareData>();
+ if (m_typeProfilingRareData) {
+ result->m_typeProfilingRareData = std::make_unique<TypeProfilingRareData>();
{
- auto iter = m_rareData->m_uniqueIDMap.begin();
- auto end = m_rareData->m_uniqueIDMap.end();
+ auto iter = m_typeProfilingRareData->m_uniqueIDMap.begin();
+ auto end = m_typeProfilingRareData->m_uniqueIDMap.end();
for (; iter != end; ++iter)
- result->m_rareData->m_uniqueIDMap.set(iter->key, iter->value);
+ result->m_typeProfilingRareData->m_uniqueIDMap.set(iter->key, iter->value);
}
{
- auto iter = m_rareData->m_offsetToVariableMap.begin();
- auto end = m_rareData->m_offsetToVariableMap.end();
+ auto iter = m_typeProfilingRareData->m_offsetToVariableMap.begin();
+ auto end = m_typeProfilingRareData->m_offsetToVariableMap.end();
for (; iter != end; ++iter)
- result->m_rareData->m_offsetToVariableMap.set(iter->key, iter->value);
+ result->m_typeProfilingRareData->m_offsetToVariableMap.set(iter->key, iter->value);
}
{
- auto iter = m_rareData->m_uniqueTypeSetMap.begin();
- auto end = m_rareData->m_uniqueTypeSetMap.end();
+ auto iter = m_typeProfilingRareData->m_uniqueTypeSetMap.begin();
+ auto end = m_typeProfilingRareData->m_uniqueTypeSetMap.end();
for (; iter != end; ++iter)
- result->m_rareData->m_uniqueTypeSetMap.set(iter->key, iter->value);
+ result->m_typeProfilingRareData->m_uniqueTypeSetMap.set(iter->key, iter->value);
}
}
@@ -192,40 +189,23 @@
void SymbolTable::prepareForTypeProfiling(const ConcurrentJITLocker&)
{
- if (m_rareData)
+ if (m_typeProfilingRareData)
return;
- m_rareData = std::make_unique<SymbolTableRareData>();
+ m_typeProfilingRareData = std::make_unique<TypeProfilingRareData>();
for (auto iter = m_map.begin(), end = m_map.end(); iter != end; ++iter) {
- m_rareData->m_uniqueIDMap.set(iter->key, TypeProfilerNeedsUniqueIDGeneration);
- m_rareData->m_offsetToVariableMap.set(iter->value.varOffset(), iter->key);
+ m_typeProfilingRareData->m_uniqueIDMap.set(iter->key, TypeProfilerNeedsUniqueIDGeneration);
+ m_typeProfilingRareData->m_offsetToVariableMap.set(iter->value.varOffset(), iter->key);
}
}
-CodeBlock* SymbolTable::rareDataCodeBlock()
-{
- if (!m_rareData)
- return nullptr;
-
- return m_rareData->m_codeBlock.get();
-}
-
-void SymbolTable::setRareDataCodeBlock(CodeBlock* codeBlock)
-{
- if (!m_rareData)
- m_rareData = std::make_unique<SymbolTableRareData>();
-
- ASSERT(!m_rareData->m_codeBlock);
- m_rareData->m_codeBlock.set(*codeBlock->vm(), this, codeBlock);
-}
-
GlobalVariableID SymbolTable::uniqueIDForVariable(const ConcurrentJITLocker&, UniquedStringImpl* key, VM& vm)
{
- RELEASE_ASSERT(m_rareData);
+ RELEASE_ASSERT(m_typeProfilingRareData);
- auto iter = m_rareData->m_uniqueIDMap.find(key);
- auto end = m_rareData->m_uniqueIDMap.end();
+ auto iter = m_typeProfilingRareData->m_uniqueIDMap.find(key);
+ auto end = m_typeProfilingRareData->m_uniqueIDMap.end();
if (iter == end)
return TypeProfilerNoGlobalIDExists;
@@ -232,8 +212,8 @@
GlobalVariableID id = iter->value;
if (id == TypeProfilerNeedsUniqueIDGeneration) {
id = vm.typeProfiler()->getNextUniqueVariableID();
- m_rareData->m_uniqueIDMap.set(key, id);
- m_rareData->m_uniqueTypeSetMap.set(key, TypeSet::create()); // Make a new global typeset for this corresponding ID.
+ m_typeProfilingRareData->m_uniqueIDMap.set(key, id);
+ m_typeProfilingRareData->m_uniqueTypeSetMap.set(key, TypeSet::create()); // Make a new global typeset for this corresponding ID.
}
return id;
@@ -241,10 +221,10 @@
GlobalVariableID SymbolTable::uniqueIDForOffset(const ConcurrentJITLocker& locker, VarOffset offset, VM& vm)
{
- RELEASE_ASSERT(m_rareData);
+ RELEASE_ASSERT(m_typeProfilingRareData);
- auto iter = m_rareData->m_offsetToVariableMap.find(offset);
- auto end = m_rareData->m_offsetToVariableMap.end();
+ auto iter = m_typeProfilingRareData->m_offsetToVariableMap.find(offset);
+ auto end = m_typeProfilingRareData->m_offsetToVariableMap.end();
if (iter == end)
return TypeProfilerNoGlobalIDExists;
@@ -253,12 +233,12 @@
RefPtr<TypeSet> SymbolTable::globalTypeSetForOffset(const ConcurrentJITLocker& locker, VarOffset offset, VM& vm)
{
- RELEASE_ASSERT(m_rareData);
+ RELEASE_ASSERT(m_typeProfilingRareData);
uniqueIDForOffset(locker, offset, vm); // Lazily create the TypeSet if necessary.
- auto iter = m_rareData->m_offsetToVariableMap.find(offset);
- auto end = m_rareData->m_offsetToVariableMap.end();
+ auto iter = m_typeProfilingRareData->m_offsetToVariableMap.find(offset);
+ auto end = m_typeProfilingRareData->m_offsetToVariableMap.end();
if (iter == end)
return nullptr;
@@ -267,12 +247,12 @@
RefPtr<TypeSet> SymbolTable::globalTypeSetForVariable(const ConcurrentJITLocker& locker, UniquedStringImpl* key, VM& vm)
{
- RELEASE_ASSERT(m_rareData);
+ RELEASE_ASSERT(m_typeProfilingRareData);
uniqueIDForVariable(locker, key, vm); // Lazily create the TypeSet if necessary.
- auto iter = m_rareData->m_uniqueTypeSetMap.find(key);
- auto end = m_rareData->m_uniqueTypeSetMap.end();
+ auto iter = m_typeProfilingRareData->m_uniqueTypeSetMap.find(key);
+ auto end = m_typeProfilingRareData->m_uniqueTypeSetMap.end();
if (iter == end)
return nullptr;
Modified: trunk/Source/_javascript_Core/runtime/SymbolTable.h (202683 => 202684)
--- trunk/Source/_javascript_Core/runtime/SymbolTable.h 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/_javascript_Core/runtime/SymbolTable.h 2016-06-30 17:31:23 UTC (rev 202684)
@@ -679,9 +679,6 @@
SymbolTable* cloneScopePart(VM&);
void prepareForTypeProfiling(const ConcurrentJITLocker&);
-
- CodeBlock* rareDataCodeBlock();
- void setRareDataCodeBlock(CodeBlock*);
InferredValue* singletonScope() { return m_singletonScope.get(); }
@@ -698,13 +695,12 @@
Map m_map;
ScopeOffset m_maxScopeOffset;
- struct SymbolTableRareData {
+ struct TypeProfilingRareData {
UniqueIDMap m_uniqueIDMap;
OffsetToVariableMap m_offsetToVariableMap;
UniqueTypeSetMap m_uniqueTypeSetMap;
- WriteBarrier<CodeBlock> m_codeBlock;
};
- std::unique_ptr<SymbolTableRareData> m_rareData;
+ std::unique_ptr<TypeProfilingRareData> m_typeProfilingRareData;
bool m_usesNonStrictEval : 1;
bool m_nestedLexicalScope : 1; // Non-function LexicalScope.
Modified: trunk/Source/WebInspectorUI/ChangeLog (202683 => 202684)
--- trunk/Source/WebInspectorUI/ChangeLog 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/WebInspectorUI/ChangeLog 2016-06-30 17:31:23 UTC (rev 202684)
@@ -1,3 +1,18 @@
+2016-06-30 Commit Queue <commit-qu...@webkit.org>
+
+ Unreviewed, rolling out r202659.
+ https://bugs.webkit.org/show_bug.cgi?id=159305
+
+ The test for this change times out on mac-wk2 debug and caused
+ an existing test to crash. (Requested by ryanhaddad on
+ #webkit).
+
+ Reverted changeset:
+
+ "Web Inspector: Wrong function name next to scope"
+ https://bugs.webkit.org/show_bug.cgi?id=158210
+ http://trac.webkit.org/changeset/202659
+
2016-06-29 Joseph Pecoraro <pecor...@apple.com>
Web Inspector: Wrong function name next to scope
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js (202683 => 202684)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js 2016-06-30 17:31:23 UTC (rev 202684)
@@ -662,7 +662,7 @@
}
var object = WebInspector.RemoteObject.fromPayload(payload.object);
- return new WebInspector.ScopeChainNode(type, [object], payload.name, payload.location);
+ return new WebInspector.ScopeChainNode(type, [object]);
}
_pauseReasonFromPayload(payload)
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js (202683 => 202684)
--- trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CallFrame.js 2016-06-30 17:31:23 UTC (rev 202684)
@@ -45,15 +45,46 @@
// Public
- get id() { return this._id; }
- get sourceCodeLocation() { return this._sourceCodeLocation; }
- get functionName() { return this._functionName; }
- get nativeCode() { return this._nativeCode; }
- get programCode() { return this._programCode; }
- get thisObject() { return this._thisObject; }
- get scopeChain() { return this._scopeChain; }
- get isTailDeleted() { return this._isTailDeleted; }
+ get id()
+ {
+ return this._id;
+ }
+ get sourceCodeLocation()
+ {
+ return this._sourceCodeLocation;
+ }
+
+ get functionName()
+ {
+ return this._functionName;
+ }
+
+ get nativeCode()
+ {
+ return this._nativeCode;
+ }
+
+ get programCode()
+ {
+ return this._programCode;
+ }
+
+ get thisObject()
+ {
+ return this._thisObject;
+ }
+
+ get scopeChain()
+ {
+ return this._scopeChain;
+ }
+
+ get isTailDeleted()
+ {
+ return this._isTailDeleted;
+ }
+
saveIdentityToCookie()
{
// Do nothing. The call frame is torn down when the inspector closes, and
@@ -81,99 +112,6 @@
this._scopeChain[i].objects[0].deprecatedGetAllProperties(propertiesCollected);
}
- mergedScopeChain()
- {
- let mergedScopes = [];
-
- // Scopes list goes from top/local (1) to bottom/global (5)
- // [scope1, scope2, scope3, scope4, scope5]
- let scopes = this._scopeChain.slice();
-
- // Merge similiar scopes. Some function call frames may have multiple
- // top level closure scopes (one for `var`s one for `let`s) that can be
- // combined to a single scope of variables. Go in reverse order so we
- // merge the first two closure scopes with the same name. Also mark
- // the first time we see a new name, so we know the base for the name.
- // [scope1&2, scope3, scope4, scope5]
- // foo bar GLE global
- let lastMarkedHash = null;
- function markAsBaseIfNeeded(scope) {
- if (!scope.hash)
- return false;
- if (scope.type !== WebInspector.ScopeChainNode.Type.Closure)
- return false;
- if (scope.hash === lastMarkedHash)
- return false;
- lastMarkedHash = scope.hash;
- scope.__baseClosureScope = true;
- return true;
- }
-
- function shouldMergeClosureScopes(youngScope, oldScope, lastMerge) {
- if (!youngScope || !oldScope)
- return false;
-
- // Don't merge unknown locations.
- if (!youngScope.hash || !oldScope.hash)
- return false;
-
- // Only merge closure scopes.
- if (youngScope.type !== WebInspector.ScopeChainNode.Type.Closure)
- return false;
- if (oldScope.type !== WebInspector.ScopeChainNode.Type.Closure)
- return false;
-
- // Don't merge if they are not the same.
- if (youngScope.hash !== oldScope.hash)
- return false;
-
- // Don't merge if there was already a merge.
- if (lastMerge && youngScope.hash === lastMerge.hash)
- return false;
-
- return true;
- }
-
- let lastScope = null;
- let lastMerge = null;
- for (let i = scopes.length - 1; i >= 0; --i) {
- let scope = scopes[i];
- markAsBaseIfNeeded(scope);
- if (shouldMergeClosureScopes(scope, lastScope, lastMerge)) {
- console.assert(lastScope.__baseClosureScope);
- let type = WebInspector.ScopeChainNode.Type.Closure;
- let objects = lastScope.objects.concat(scope.objects);
- let merged = new WebInspector.ScopeChainNode(type, objects, scope.name, scope.location);
- merged.__baseClosureScope = true;
- console.assert(objects.length === 2);
-
- mergedScopes.pop(); // Remove the last.
- mergedScopes.push(merged); // Add the merged scope.
-
- lastMerge = merged;
- lastScope = null;
- } else {
- mergedScopes.push(scope);
-
- lastMerge = null;
- lastScope = scope;
- }
- }
-
- mergedScopes = mergedScopes.reverse();
-
- // Mark the first Closure as Local if the name matches this call frame.
- for (let scope of mergedScopes) {
- if (scope.type === WebInspector.ScopeChainNode.Type.Closure) {
- if (scope.name === this._functionName)
- scope.convertToLocalScope();
- break;
- }
- }
-
- return mergedScopes;
- }
-
// Static
static functionNameFromPayload(payload)
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js (202683 => 202684)
--- trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/ScopeChainNode.js 2016-06-30 17:31:23 UTC (rev 202684)
@@ -25,7 +25,7 @@
WebInspector.ScopeChainNode = class ScopeChainNode extends WebInspector.Object
{
- constructor(type, objects, name, location)
+ constructor(type, objects)
{
super();
@@ -37,31 +37,18 @@
this._type = type || null;
this._objects = objects || [];
- this._name = name || "";
- this._location = location || null;
}
// Public
- get type() { return this._type; }
- get objects() { return this._objects; }
- get name() { return this._name; }
- get location() { return this._location; }
-
- get hash()
+ get type()
{
- if (this._hash)
- return this._hash;
-
- this._hash = this._name;
- if (this._location)
- this._hash += `:${this._location.scriptId}:${this._location.lineNumber}:${this._location.columnNumber}`;
- return this._hash;
+ return this._type;
}
- convertToLocalScope()
+ get objects()
{
- this._type = WebInspector.ScopeChainNode.Type.Local;
+ return this._objects;
}
};
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js (202683 => 202684)
--- trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js 2016-06-30 17:16:39 UTC (rev 202683)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js 2016-06-30 17:31:23 UTC (rev 202684)
@@ -164,92 +164,159 @@
for (let type in WebInspector.ScopeChainNode.Type)
sectionCountByType.set(WebInspector.ScopeChainNode.Type[type], 0);
- let scopeChain = callFrame.mergedScopeChain();
- for (let scope of scopeChain) {
- let title = null;
- let extraPropertyDescriptor = null;
- let collapsedByDefault = false;
+ // Scopes list goes from top/local (1) to bottom/global (5)
+ // Call frames list goes from top/local (1) to bottom/global (2)
+ // [scope1, scope2, scope3, scope4, scope5]
+ // [CallFrame1, CallFrame2]
+ let scopeChain = callFrame.scopeChain;
+ let callFrames = WebInspector.debuggerManager.callFrames;
- let count = sectionCountByType.get(scope.type);
- sectionCountByType.set(scope.type, ++count);
-
- switch (scope.type) {
- case WebInspector.ScopeChainNode.Type.Local:
- foundLocalScope = true;
- collapsedByDefault = false;
- title = WebInspector.UIString("Local Variables");
- if (callFrame.thisObject)
- extraPropertyDescriptor = new WebInspector.PropertyDescriptor({name: "this", value: callFrame.thisObject});
+ // Group scopes with the call frame containing them.
+ // Creating a map that looks like:
+ // CallFrame2 => [scope5, scope4]
+ // CallFrame1 => [scope3, scope2, scope1]
+ let reversedScopeChain = scopeChain.slice().reverse();
+ let callFrameScopes = new Map;
+ let lastLength = 0;
+ for (let i = callFrames.length - 1; i >= 0; --i) {
+ let nextCallFrame = callFrames[i];
+ console.assert(nextCallFrame.scopeChain.length > lastLength);
+ callFrameScopes.set(nextCallFrame, reversedScopeChain.slice(lastLength, nextCallFrame.scopeChain.length));
+ lastLength = nextCallFrame.scopeChain.length;
+ if (nextCallFrame === callFrame) {
+ console.assert(lastLength === scopeChain.length);
break;
+ }
+ }
- case WebInspector.ScopeChainNode.Type.Closure:
- if (scope.__baseClosureScope && scope.name)
- title = WebInspector.UIString("Closure Variables (%s)").format(scope.name);
- else
- title = WebInspector.UIString("Closure Variables");
- collapsedByDefault = false;
- break;
+ // Now that we have this map we can merge some of the scopes within an individual
+ // call frame. In particular, function call frames may have multiple top level
+ // closure scopes (one for `var`s one for `let`s) that can be combined to a
+ // single scope of variables.
+ // This modifies the Map, resulting in:
+ // CallFrame2 => [scope4, scope5]
+ // CallFrame1 => [scope1, scope2&3]
+ for (let [currentCallFrame, scopes] of callFrameScopes) {
+ let firstClosureScope = null;
+ for (let scope of scopes) {
+ // Reached a non-closure scope. Bail.
+ let isClosureScope = scope.type === WebInspector.ScopeChainNode.Type.Closure;
+ if (!isClosureScope && firstClosureScope)
+ break;
- case WebInspector.ScopeChainNode.Type.Block:
- title = WebInspector.UIString("Block Variables");
- collapsedByDefault = false;
- break;
+ // Found first closure scope. Mark it so we can provide the function name later in the UI.
+ if (isClosureScope && !firstClosureScope) {
+ firstClosureScope = scope;
+ firstClosureScope[WebInspector.ScopeChainDetailsSidebarPanel.CallFrameBaseClosureScopeSymbol] = true;
+ continue;
+ }
- case WebInspector.ScopeChainNode.Type.Catch:
- title = WebInspector.UIString("Catch Variables");
- collapsedByDefault = false;
- break;
+ // Found 2 sequential top level closure scopes. Merge and mark it so we can provide the function name later in the UI.
+ if (isClosureScope && firstClosureScope) {
+ let type = currentCallFrame === callFrame ? WebInspector.ScopeChainNode.Type.Local : WebInspector.ScopeChainNode.Type.Closure;
+ let objects = firstClosureScope.objects.concat(scope.objects);
+ let merged = new WebInspector.ScopeChainNode(type, objects);
+ merged[WebInspector.ScopeChainDetailsSidebarPanel.CallFrameBaseClosureScopeSymbol] = true;
+ console.assert(objects.length === 2);
- case WebInspector.ScopeChainNode.Type.FunctionName:
- title = WebInspector.UIString("Function Name Variable");
- collapsedByDefault = true;
- break;
+ let index = scopes.indexOf(firstClosureScope);
+ scopes.splice(index, 1); // Remove one of them.
+ scopes[index] = merged; // Replace the remaining with the merged.
+ break;
+ }
+ }
+ scopes.reverse();
+ }
- case WebInspector.ScopeChainNode.Type.With:
- title = WebInspector.UIString("With Object Properties");
- collapsedByDefault = foundLocalScope;
- break;
+ // Now we can walk the list of call frames and their scopes.
+ // We walk in top -> down order:
+ // CallFrame1 => [scope1, scope2&3]
+ // CallFrame2 => [scope5, scope4]
+ for (let [call, scopes] of [...callFrameScopes.entries()].reverse()) {
+ for (let scope of scopes) {
+ let title = null;
+ let extraPropertyDescriptor = null;
+ let collapsedByDefault = false;
- case WebInspector.ScopeChainNode.Type.Global:
- title = WebInspector.UIString("Global Variables");
- collapsedByDefault = true;
- break;
+ let count = sectionCountByType.get(scope.type);
+ sectionCountByType.set(scope.type, ++count);
- case WebInspector.ScopeChainNode.Type.GlobalLexicalEnvironment:
- title = WebInspector.UIString("Global Lexical Environment");
- collapsedByDefault = true;
- break;
- }
+ switch (scope.type) {
+ case WebInspector.ScopeChainNode.Type.Local:
+ foundLocalScope = true;
+ collapsedByDefault = false;
+ title = WebInspector.UIString("Local Variables");
+ if (call.thisObject)
+ extraPropertyDescriptor = new WebInspector.PropertyDescriptor({name: "this", value: call.thisObject});
+ break;
- let detailsSectionIdentifier = scope.type + "-" + sectionCountByType.get(scope.type);
+ case WebInspector.ScopeChainNode.Type.Closure:
+ if (scope[WebInspector.ScopeChainDetailsSidebarPanel.CallFrameBaseClosureScopeSymbol] && call.functionName)
+ title = WebInspector.UIString("Closure Variables (%s)").format(call.functionName);
+ else
+ title = WebInspector.UIString("Closure Variables");
+ collapsedByDefault = false;
+ break;
- // FIXME: This just puts two ObjectTreeViews next to each other, but that means
- // that properties are not nicely sorted between the two separate lists.
+ case WebInspector.ScopeChainNode.Type.Block:
+ title = WebInspector.UIString("Block Variables");
+ collapsedByDefault = false;
+ break;
- let rows = [];
- for (let object of scope.objects) {
- let scopePropertyPath = WebInspector.PropertyPath.emptyPropertyPathForScope(object);
- let objectTree = new WebInspector.ObjectTreeView(object, WebInspector.ObjectTreeView.Mode.Properties, scopePropertyPath);
+ case WebInspector.ScopeChainNode.Type.Catch:
+ title = WebInspector.UIString("Catch Variables");
+ collapsedByDefault = false;
+ break;
- objectTree.showOnlyProperties();
+ case WebInspector.ScopeChainNode.Type.FunctionName:
+ title = WebInspector.UIString("Function Name Variable");
+ collapsedByDefault = true;
+ break;
- if (extraPropertyDescriptor) {
- objectTree.appendExtraPropertyDescriptor(extraPropertyDescriptor);
- extraPropertyDescriptor = null;
+ case WebInspector.ScopeChainNode.Type.With:
+ title = WebInspector.UIString("With Object Properties");
+ collapsedByDefault = foundLocalScope;
+ break;
+
+ case WebInspector.ScopeChainNode.Type.Global:
+ title = WebInspector.UIString("Global Variables");
+ collapsedByDefault = true;
+ break;
+
+ case WebInspector.ScopeChainNode.Type.GlobalLexicalEnvironment:
+ title = WebInspector.UIString("Global Lexical Environment");
+ collapsedByDefault = true;
+ break;
}
- let treeOutline = objectTree.treeOutline;
- treeOutline.addEventListener(WebInspector.TreeOutline.Event.ElementAdded, this._treeElementAdded.bind(this, detailsSectionIdentifier), this);
- treeOutline.addEventListener(WebInspector.TreeOutline.Event.ElementDisclosureDidChanged, this._treeElementDisclosureDidChange.bind(this, detailsSectionIdentifier), this);
+ let detailsSectionIdentifier = scope.type + "-" + sectionCountByType.get(scope.type);
- // FIXME: <https://webkit.org/b/140567> Web Inspector: Do not request Scope Chain lists if section is collapsed (mainly Global Variables)
- // This autoexpands the ObjectTreeView and fetches all properties. Should wait to see if we are collapsed or not.
- rows.push(new WebInspector.DetailsSectionPropertiesRow(objectTree));
+ // FIXME: This just puts two ObjectTreeViews next to eachother, but that means
+ // that properties are not nicely sorted between the two separate lists.
+
+ let rows = [];
+ for (let object of scope.objects) {
+ let scopePropertyPath = WebInspector.PropertyPath.emptyPropertyPathForScope(object);
+ let objectTree = new WebInspector.ObjectTreeView(object, WebInspector.ObjectTreeView.Mode.Properties, scopePropertyPath);
+
+ objectTree.showOnlyProperties();
+
+ if (extraPropertyDescriptor) {
+ objectTree.appendExtraPropertyDescriptor(extraPropertyDescriptor);
+ extraPropertyDescriptor = null;
+ }
+
+ let treeOutline = objectTree.treeOutline;
+ treeOutline.addEventListener(WebInspector.TreeOutline.Event.ElementAdded, this._treeElementAdded.bind(this, detailsSectionIdentifier), this);
+ treeOutline.addEventListener(WebInspector.TreeOutline.Event.ElementDisclosureDidChanged, this._treeElementDisclosureDidChange.bind(this, detailsSectionIdentifier), this);
+
+ rows.push(new WebInspector.DetailsSectionPropertiesRow(objectTree));
+ }
+
+ let detailsSection = new WebInspector.DetailsSection(detailsSectionIdentifier, title, null, null, collapsedByDefault);
+ detailsSection.groups[0].rows = rows;
+ detailsSections.push(detailsSection);
}
-
- let detailsSection = new WebInspector.DetailsSection(detailsSectionIdentifier, title, null, null, collapsedByDefault);
- detailsSection.groups[0].rows = rows;
- detailsSections.push(detailsSection);
}
return Promise.resolve(detailsSections);
@@ -478,3 +545,4 @@
WebInspector.ScopeChainDetailsSidebarPanel._autoExpandProperties = new Set;
WebInspector.ScopeChainDetailsSidebarPanel.WatchExpressionsObjectGroupName = "watch-expressions";
+WebInspector.ScopeChainDetailsSidebarPanel.CallFrameBaseClosureScopeSymbol = Symbol("scope-chain-call-frame-base-closure-scope");