| Index: third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
|
| diff --git a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js b/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
|
| index 551e091f790030ea20215208e902fa93dd6d1973..b9397d2b1a248b889ec6951ee916898c19a30395 100644
|
| --- a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
|
| +++ b/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
|
| @@ -395,34 +395,68 @@ DebuggerScript._frameMirrorToJSCallFrame = function(frameMirror, callerFrame, in
|
| var scopeTypes = new Array(scopeMirrors.length);
|
| var scopeObjects = new Array(scopeMirrors.length);
|
| var scopeNames = new Array(scopeMirrors.length);
|
| + var scopeStartPositions = new Array(scopeMirrors.length);
|
| + var scopeEndPositions = new Array(scopeMirrors.length);
|
| + var scopeFunctions = new Array(scopeMirrors.length);
|
| for (var i = 0; i < scopeMirrors.length; ++i) {
|
| var scopeDetails = scopeMirrors[i].details();
|
| scopeTypes[i] = scopeDetails.type();
|
| scopeObjects[i] = scopeDetails.object();
|
| scopeNames[i] = scopeDetails.name();
|
| + scopeStartPositions[i] = scopeDetails.startPosition();
|
| + scopeEndPositions[i] = scopeDetails.endPosition();
|
| + scopeFunctions[i] = scopeDetails.func();
|
| }
|
|
|
| // Calculated lazily.
|
| var scopeChain;
|
| var funcMirror;
|
| var location;
|
| + var scopeStartLocations;
|
| + var scopeEndLocations;
|
| +
|
| + function createLocation(script, pos)
|
| + {
|
| + if (!script)
|
| + return null;
|
| +
|
| + location = script.locationFromPosition(pos, true);
|
| + return {
|
| + "lineNumber": location.line,
|
| + "columnNumber": location.column,
|
| + "scriptId": String(script.id())
|
| + }
|
| + }
|
|
|
| function lazyScopeChain()
|
| {
|
| if (!scopeChain) {
|
| scopeChain = [];
|
| + scopeStartLocations = [];
|
| + scopeEndLocations = [];
|
| for (var i = 0, j = 0; i < scopeObjects.length; ++i) {
|
| - var scopeObject = DebuggerScript._buildScopeObject(scopeTypes[i], scopeObjects[i], scopeNames[i]);
|
| + var scopeObject = DebuggerScript._buildScopeObject(scopeTypes[i], scopeObjects[i]);
|
| if (scopeObject) {
|
| scopeTypes[j] = scopeTypes[i];
|
| scopeNames[j] = scopeNames[i];
|
| scopeChain[j] = scopeObject;
|
| +
|
| + var funcMirror = MakeMirror(scopeFunctions[i]);
|
| + if (!funcMirror.isFunction())
|
| + funcMirror = new UnresolvedFunctionMirror(funcObject);
|
| +
|
| + var script = funcMirror.script();
|
| + scopeStartLocations[j] = createLocation(script, scopeStartPositions[i]);
|
| + scopeEndLocations[j] = createLocation(script, scopeEndPositions[i]);
|
| ++j;
|
| }
|
| }
|
| scopeTypes.length = scopeChain.length;
|
| scopeNames.length = scopeChain.length;
|
| scopeObjects = null; // Free for GC.
|
| + scopeFunctions = null;
|
| + scopeStartPositions = null;
|
| + scopeEndPositions = null;
|
| }
|
| return scopeChain;
|
| }
|
| @@ -441,6 +475,22 @@ DebuggerScript._frameMirrorToJSCallFrame = function(frameMirror, callerFrame, in
|
| return scopeNames;
|
| }
|
|
|
| + function lazyScopeStartLocations()
|
| + {
|
| + if (!scopeChain)
|
| + lazyScopeChain();
|
| +
|
| + return scopeStartLocations;
|
| + }
|
| +
|
| + function lazyScopeEndLocations()
|
| + {
|
| + if (!scopeChain)
|
| + lazyScopeChain();
|
| +
|
| + return scopeEndLocations;
|
| + }
|
| +
|
| function ensureFuncMirror()
|
| {
|
| if (!funcMirror) {
|
| @@ -551,6 +601,8 @@ DebuggerScript._frameMirrorToJSCallFrame = function(frameMirror, callerFrame, in
|
| "scopeChain": lazyScopeChain,
|
| "scopeType": lazyScopeTypes,
|
| "scopeName": lazyScopeNames,
|
| + "scopeStartLocation": lazyScopeStartLocations,
|
| + "scopeEndLocation": lazyScopeEndLocations,
|
| "evaluate": evaluate,
|
| "caller": callerFrame,
|
| "restart": restart,
|
|
|