| 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
|
| deleted file mode 100644
|
| index 18beac0e03ceea0d897f7d584a6a38984c51eddd..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
|
| +++ /dev/null
|
| @@ -1,711 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2010 Google 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:
|
| - *
|
| - * * Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * * 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.
|
| - * * Neither the name of Google Inc. nor the names of its
|
| - * contributors may be used to endorse or promote products derived from
|
| - * this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| - * "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 THE COPYRIGHT
|
| - * OWNER 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.
|
| - */
|
| -"use strict";
|
| -
|
| -(function () {
|
| -
|
| -var DebuggerScript = {};
|
| -
|
| -/** @enum */
|
| -DebuggerScript.PauseOnExceptionsState = {
|
| - DontPauseOnExceptions: 0,
|
| - PauseOnAllExceptions: 1,
|
| - PauseOnUncaughtExceptions: 2
|
| -};
|
| -
|
| -DebuggerScript._pauseOnExceptionsState = DebuggerScript.PauseOnExceptionsState.DontPauseOnExceptions;
|
| -Debug.clearBreakOnException();
|
| -Debug.clearBreakOnUncaughtException();
|
| -
|
| -/**
|
| - * @param {?CompileEvent} eventData
|
| - */
|
| -DebuggerScript.getAfterCompileScript = function(eventData)
|
| -{
|
| - var script = eventData.script().value();
|
| - if (!script.is_debugger_script)
|
| - return DebuggerScript._formatScript(eventData.script().value());
|
| - return null;
|
| -}
|
| -
|
| -/** @type {!Map<!ScopeType, string>} */
|
| -DebuggerScript._scopeTypeNames = new Map();
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.Global, "global");
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.Local, "local");
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.With, "with");
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.Closure, "closure");
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.Catch, "catch");
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.Block, "block");
|
| -DebuggerScript._scopeTypeNames.set(ScopeType.Script, "script");
|
| -
|
| -/**
|
| - * @param {function()} fun
|
| - * @return {?Array<!Scope>}
|
| - */
|
| -DebuggerScript.getFunctionScopes = function(fun)
|
| -{
|
| - var mirror = MakeMirror(fun);
|
| - if (!mirror.isFunction())
|
| - return null;
|
| - var functionMirror = /** @type {!FunctionMirror} */(mirror);
|
| - var count = functionMirror.scopeCount();
|
| - if (count == 0)
|
| - return null;
|
| - var result = [];
|
| - for (var i = 0; i < count; i++) {
|
| - var scopeDetails = functionMirror.scope(i).details();
|
| - var scopeObject = DebuggerScript._buildScopeObject(scopeDetails.type(), scopeDetails.object());
|
| - if (!scopeObject)
|
| - continue;
|
| - result.push({
|
| - type: /** @type {string} */(DebuggerScript._scopeTypeNames.get(scopeDetails.type())),
|
| - object: scopeObject,
|
| - name: scopeDetails.name() || ""
|
| - });
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -/**
|
| - * @param {Object} object
|
| - * @return {?RawLocation}
|
| - */
|
| -DebuggerScript.getGeneratorObjectLocation = function(object)
|
| -{
|
| - var mirror = MakeMirror(object, true /* transient */);
|
| - if (!mirror.isGenerator())
|
| - return null;
|
| - var generatorMirror = /** @type {!GeneratorMirror} */(mirror);
|
| - var funcMirror = generatorMirror.func();
|
| - if (!funcMirror.resolved())
|
| - return null;
|
| - var location = generatorMirror.sourceLocation() || funcMirror.sourceLocation();
|
| - var script = funcMirror.script();
|
| - if (script && location) {
|
| - return {
|
| - scriptId: "" + script.id(),
|
| - lineNumber: location.line,
|
| - columnNumber: location.column
|
| - };
|
| - }
|
| - return null;
|
| -}
|
| -
|
| -/**
|
| - * @param {Object} object
|
| - * @return {!Array<!{value: *}>|undefined}
|
| - */
|
| -DebuggerScript.getCollectionEntries = function(object)
|
| -{
|
| - var mirror = MakeMirror(object, true /* transient */);
|
| - if (mirror.isMap())
|
| - return /** @type {!MapMirror} */(mirror).entries();
|
| - if (mirror.isSet() || mirror.isIterator()) {
|
| - var result = [];
|
| - var values = mirror.isSet() ? /** @type {!SetMirror} */(mirror).values() : /** @type {!IteratorMirror} */(mirror).preview();
|
| - for (var i = 0; i < values.length; ++i)
|
| - result.push({ value: values[i] });
|
| - return result;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @param {string|undefined} contextData
|
| - * @return {number}
|
| - */
|
| -DebuggerScript._executionContextId = function(contextData)
|
| -{
|
| - if (!contextData)
|
| - return 0;
|
| - var match = contextData.match(/^[^,]*,([^,]*),.*$/);
|
| - if (!match)
|
| - return 0;
|
| - return parseInt(match[1], 10) || 0;
|
| -}
|
| -
|
| -/**
|
| - * @param {string|undefined} contextData
|
| - * @return {string}
|
| - */
|
| -DebuggerScript._executionContextAuxData = function(contextData)
|
| -{
|
| - if (!contextData)
|
| - return "";
|
| - var match = contextData.match(/^[^,]*,[^,]*,(.*)$/);
|
| - return match ? match[1] : "";
|
| -}
|
| -
|
| -/**
|
| - * @param {string} contextGroupId
|
| - * @return {!Array<!FormattedScript>}
|
| - */
|
| -DebuggerScript.getScripts = function(contextGroupId)
|
| -{
|
| - var result = [];
|
| - var scripts = Debug.scripts();
|
| - var contextDataPrefix = null;
|
| - if (contextGroupId)
|
| - contextDataPrefix = contextGroupId + ",";
|
| - for (var i = 0; i < scripts.length; ++i) {
|
| - var script = scripts[i];
|
| - if (contextDataPrefix) {
|
| - if (!script.context_data)
|
| - continue;
|
| - // Context data is a string in the following format:
|
| - // <contextGroupId>,<contextId>,<auxData>
|
| - if (script.context_data.indexOf(contextDataPrefix) !== 0)
|
| - continue;
|
| - }
|
| - if (script.is_debugger_script)
|
| - continue;
|
| - result.push(DebuggerScript._formatScript(script));
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -/**
|
| - * @param {!Script} script
|
| - * @return {!FormattedScript}
|
| - */
|
| -DebuggerScript._formatScript = function(script)
|
| -{
|
| - var lineEnds = script.line_ends;
|
| - var lineCount = lineEnds.length;
|
| - var endLine = script.line_offset + lineCount - 1;
|
| - var endColumn;
|
| - // V8 will not count last line if script source ends with \n.
|
| - if (script.source[script.source.length - 1] === '\n') {
|
| - endLine += 1;
|
| - endColumn = 0;
|
| - } else {
|
| - if (lineCount === 1)
|
| - endColumn = script.source.length + script.column_offset;
|
| - else
|
| - endColumn = script.source.length - (lineEnds[lineCount - 2] + 1);
|
| - }
|
| - return {
|
| - id: script.id,
|
| - name: script.nameOrSourceURL(),
|
| - sourceURL: script.source_url,
|
| - sourceMappingURL: script.source_mapping_url,
|
| - source: script.source,
|
| - startLine: script.line_offset,
|
| - startColumn: script.column_offset,
|
| - endLine: endLine,
|
| - endColumn: endColumn,
|
| - executionContextId: DebuggerScript._executionContextId(script.context_data),
|
| - // Note that we cannot derive aux data from context id because of compilation cache.
|
| - executionContextAuxData: DebuggerScript._executionContextAuxData(script.context_data)
|
| - };
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - * @param {!BreakpointInfo} info
|
| - * @return {string|undefined}
|
| - */
|
| -DebuggerScript.setBreakpoint = function(execState, info)
|
| -{
|
| - var breakId = Debug.setScriptBreakPointById(info.sourceID, info.lineNumber, info.columnNumber, info.condition, undefined, Debug.BreakPositionAlignment.Statement);
|
| - var locations = Debug.findBreakPointActualLocations(breakId);
|
| - if (!locations.length)
|
| - return undefined;
|
| - info.lineNumber = locations[0].line;
|
| - info.columnNumber = locations[0].column;
|
| - return breakId.toString();
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - * @param {!{breakpointId: number}} info
|
| - */
|
| -DebuggerScript.removeBreakpoint = function(execState, info)
|
| -{
|
| - Debug.findBreakPoint(info.breakpointId, true);
|
| -}
|
| -
|
| -/**
|
| - * @return {number}
|
| - */
|
| -DebuggerScript.pauseOnExceptionsState = function()
|
| -{
|
| - return DebuggerScript._pauseOnExceptionsState;
|
| -}
|
| -
|
| -/**
|
| - * @param {number} newState
|
| - */
|
| -DebuggerScript.setPauseOnExceptionsState = function(newState)
|
| -{
|
| - DebuggerScript._pauseOnExceptionsState = newState;
|
| -
|
| - if (DebuggerScript.PauseOnExceptionsState.PauseOnAllExceptions === newState)
|
| - Debug.setBreakOnException();
|
| - else
|
| - Debug.clearBreakOnException();
|
| -
|
| - if (DebuggerScript.PauseOnExceptionsState.PauseOnUncaughtExceptions === newState)
|
| - Debug.setBreakOnUncaughtException();
|
| - else
|
| - Debug.clearBreakOnUncaughtException();
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - * @param {number} limit
|
| - * @return {!Array<!JavaScriptCallFrame>}
|
| - */
|
| -DebuggerScript.currentCallFrames = function(execState, limit)
|
| -{
|
| - var frames = [];
|
| - for (var i = 0; i < execState.frameCount() && (!limit || i < limit); ++i)
|
| - frames.push(DebuggerScript._frameMirrorToJSCallFrame(execState.frame(i)));
|
| - return frames;
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - */
|
| -DebuggerScript.stepIntoStatement = function(execState)
|
| -{
|
| - execState.prepareStep(Debug.StepAction.StepIn);
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - */
|
| -DebuggerScript.stepFrameStatement = function(execState)
|
| -{
|
| - execState.prepareStep(Debug.StepAction.StepFrame);
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - */
|
| -DebuggerScript.stepOverStatement = function(execState)
|
| -{
|
| - execState.prepareStep(Debug.StepAction.StepNext);
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - */
|
| -DebuggerScript.stepOutOfFunction = function(execState)
|
| -{
|
| - execState.prepareStep(Debug.StepAction.StepOut);
|
| -}
|
| -
|
| -DebuggerScript.clearStepping = function()
|
| -{
|
| - Debug.clearStepping();
|
| -}
|
| -
|
| -// Returns array in form:
|
| -// [ 0, <v8_result_report> ] in case of success
|
| -// or [ 1, <general_error_message>, <compiler_message>, <line_number>, <column_number> ] in case of compile error, numbers are 1-based.
|
| -// or throws exception with message.
|
| -/**
|
| - * @param {number} scriptId
|
| - * @param {string} newSource
|
| - * @param {boolean} preview
|
| - * @return {!Array<*>}
|
| - */
|
| -DebuggerScript.liveEditScriptSource = function(scriptId, newSource, preview)
|
| -{
|
| - var scripts = Debug.scripts();
|
| - var scriptToEdit = null;
|
| - for (var i = 0; i < scripts.length; i++) {
|
| - if (scripts[i].id == scriptId) {
|
| - scriptToEdit = scripts[i];
|
| - break;
|
| - }
|
| - }
|
| - if (!scriptToEdit)
|
| - throw("Script not found");
|
| -
|
| - var changeLog = [];
|
| - try {
|
| - var result = Debug.LiveEdit.SetScriptSource(scriptToEdit, newSource, preview, changeLog);
|
| - return [0, result.stack_modified];
|
| - } catch (e) {
|
| - if (e instanceof Debug.LiveEdit.Failure && "details" in e) {
|
| - var details = /** @type {!LiveEditErrorDetails} */(e.details);
|
| - if (details.type === "liveedit_compile_error") {
|
| - var startPosition = details.position.start;
|
| - return [1, String(e), String(details.syntaxErrorMessage), Number(startPosition.line), Number(startPosition.column)];
|
| - }
|
| - }
|
| - throw e;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - */
|
| -DebuggerScript.clearBreakpoints = function(execState)
|
| -{
|
| - Debug.clearAllBreakPoints();
|
| -}
|
| -
|
| -/**
|
| - * @param {!ExecutionState} execState
|
| - * @param {!{enabled: boolean}} info
|
| - */
|
| -DebuggerScript.setBreakpointsActivated = function(execState, info)
|
| -{
|
| - Debug.debuggerFlags().breakPointsActive.setValue(info.enabled);
|
| -}
|
| -
|
| -/**
|
| - * @param {!BreakEvent} eventData
|
| - */
|
| -DebuggerScript.getBreakpointNumbers = function(eventData)
|
| -{
|
| - var breakpoints = eventData.breakPointsHit();
|
| - var numbers = [];
|
| - if (!breakpoints)
|
| - return numbers;
|
| -
|
| - for (var i = 0; i < breakpoints.length; i++) {
|
| - var breakpoint = breakpoints[i];
|
| - var scriptBreakPoint = breakpoint.script_break_point();
|
| - numbers.push(scriptBreakPoint ? scriptBreakPoint.number() : breakpoint.number());
|
| - }
|
| - return numbers;
|
| -}
|
| -
|
| -// NOTE: This function is performance critical, as it can be run on every
|
| -// statement that generates an async event (like addEventListener) to support
|
| -// asynchronous call stacks. Thus, when possible, initialize the data lazily.
|
| -/**
|
| - * @param {!FrameMirror} frameMirror
|
| - * @return {!JavaScriptCallFrame}
|
| - */
|
| -DebuggerScript._frameMirrorToJSCallFrame = function(frameMirror)
|
| -{
|
| - // Stuff that can not be initialized lazily (i.e. valid while paused with a valid break_id).
|
| - // The frameMirror and scopeMirror can be accessed only while paused on the debugger.
|
| - var frameDetails = frameMirror.details();
|
| -
|
| - var funcObject = frameDetails.func();
|
| - var sourcePosition = frameDetails.sourcePosition();
|
| - var thisObject = frameDetails.receiver();
|
| -
|
| - var isAtReturn = !!frameDetails.isAtReturn();
|
| - var returnValue = isAtReturn ? frameDetails.returnValue() : undefined;
|
| -
|
| - var scopeMirrors = frameMirror.allScopes(false);
|
| - /** @type {!Array<ScopeType>} */
|
| - var scopeTypes = new Array(scopeMirrors.length);
|
| - /** @type {?Array<!Object>} */
|
| - var scopeObjects = new Array(scopeMirrors.length);
|
| - /** @type {!Array<string|undefined>} */
|
| - var scopeNames = new Array(scopeMirrors.length);
|
| - /** @type {?Array<number>} */
|
| - var scopeStartPositions = new Array(scopeMirrors.length);
|
| - /** @type {?Array<number>} */
|
| - var scopeEndPositions = new Array(scopeMirrors.length);
|
| - /** @type {?Array<function()|null>} */
|
| - 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 ? scopeDetails.startPosition() : 0;
|
| - scopeEndPositions[i] = scopeDetails.endPosition ? scopeDetails.endPosition() : 0;
|
| - scopeFunctions[i] = scopeDetails.func ? scopeDetails.func() : null;
|
| - }
|
| -
|
| - // Calculated lazily.
|
| - var scopeChain;
|
| - var funcMirror;
|
| - var location;
|
| - /** @type {!Array<?RawLocation>} */
|
| - var scopeStartLocations;
|
| - /** @type {!Array<?RawLocation>} */
|
| - var scopeEndLocations;
|
| - var details;
|
| -
|
| - /**
|
| - * @param {!ScriptMirror|undefined} script
|
| - * @param {number} pos
|
| - * @return {?RawLocation}
|
| - */
|
| - function createLocation(script, pos)
|
| - {
|
| - if (!script)
|
| - return null;
|
| -
|
| - var location = script.locationFromPosition(pos, true);
|
| - return {
|
| - "lineNumber": location.line,
|
| - "columnNumber": location.column,
|
| - "scriptId": String(script.id())
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * @return {!Array<!Object>}
|
| - */
|
| - function ensureScopeChain()
|
| - {
|
| - if (!scopeChain) {
|
| - scopeChain = [];
|
| - scopeStartLocations = [];
|
| - scopeEndLocations = [];
|
| - for (var i = 0, j = 0; i < scopeObjects.length; ++i) {
|
| - var scopeObject = DebuggerScript._buildScopeObject(scopeTypes[i], scopeObjects[i]);
|
| - if (scopeObject) {
|
| - scopeTypes[j] = scopeTypes[i];
|
| - scopeNames[j] = scopeNames[i];
|
| - scopeChain[j] = scopeObject;
|
| -
|
| - var funcMirror = scopeFunctions ? MakeMirror(scopeFunctions[i]) : null;
|
| - if (!funcMirror || !funcMirror.isFunction())
|
| - funcMirror = new UnresolvedFunctionMirror(funcObject);
|
| -
|
| - var script = /** @type {!FunctionMirror} */(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;
|
| - }
|
| -
|
| - /**
|
| - * @return {!JavaScriptCallFrameDetails}
|
| - */
|
| - function lazyDetails()
|
| - {
|
| - if (!details) {
|
| - var scopeObjects = ensureScopeChain();
|
| - var script = ensureFuncMirror().script();
|
| - /** @type {!Array<Scope>} */
|
| - var scopes = [];
|
| - for (var i = 0; i < scopeObjects.length; ++i) {
|
| - var scope = {
|
| - "type": /** @type {string} */(DebuggerScript._scopeTypeNames.get(scopeTypes[i])),
|
| - "object": scopeObjects[i],
|
| - };
|
| - if (scopeNames[i])
|
| - scope.name = scopeNames[i];
|
| - if (scopeStartLocations[i])
|
| - scope.startLocation = /** @type {!RawLocation} */(scopeStartLocations[i]);
|
| - if (scopeEndLocations[i])
|
| - scope.endLocation = /** @type {!RawLocation} */(scopeEndLocations[i]);
|
| - scopes.push(scope);
|
| - }
|
| - details = {
|
| - "functionName": ensureFuncMirror().debugName(),
|
| - "location": {
|
| - "lineNumber": line(),
|
| - "columnNumber": column(),
|
| - "scriptId": String(script.id())
|
| - },
|
| - "this": thisObject,
|
| - "scopeChain": scopes
|
| - };
|
| - var functionLocation = ensureFuncMirror().sourceLocation();
|
| - if (functionLocation) {
|
| - details.functionLocation = {
|
| - "lineNumber": functionLocation.line,
|
| - "columnNumber": functionLocation.column,
|
| - "scriptId": String(script.id())
|
| - };
|
| - }
|
| - if (isAtReturn)
|
| - details.returnValue = returnValue;
|
| - }
|
| - return details;
|
| - }
|
| -
|
| - /**
|
| - * @return {!FunctionMirror}
|
| - */
|
| - function ensureFuncMirror()
|
| - {
|
| - if (!funcMirror) {
|
| - funcMirror = MakeMirror(funcObject);
|
| - if (!funcMirror.isFunction())
|
| - funcMirror = new UnresolvedFunctionMirror(funcObject);
|
| - }
|
| - return /** @type {!FunctionMirror} */(funcMirror);
|
| - }
|
| -
|
| - /**
|
| - * @return {!{line: number, column: number}}
|
| - */
|
| - function ensureLocation()
|
| - {
|
| - if (!location) {
|
| - var script = ensureFuncMirror().script();
|
| - if (script)
|
| - location = script.locationFromPosition(sourcePosition, true);
|
| - if (!location)
|
| - location = { line: 0, column: 0 };
|
| - }
|
| - return location;
|
| - }
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - function line()
|
| - {
|
| - return ensureLocation().line;
|
| - }
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - function column()
|
| - {
|
| - return ensureLocation().column;
|
| - }
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - function contextId()
|
| - {
|
| - var mirror = ensureFuncMirror();
|
| - // Old V8 do not have context() function on these objects
|
| - if (!mirror.context)
|
| - return DebuggerScript._executionContextId(mirror.script().value().context_data);
|
| - var context = mirror.context();
|
| - if (context)
|
| - return DebuggerScript._executionContextId(context.data());
|
| - return 0;
|
| - }
|
| -
|
| - /**
|
| - * @return {number|undefined}
|
| - */
|
| - function sourceID()
|
| - {
|
| - var script = ensureFuncMirror().script();
|
| - return script && script.id();
|
| - }
|
| -
|
| - /**
|
| - * @param {string} expression
|
| - * @return {*}
|
| - */
|
| - function evaluate(expression)
|
| - {
|
| - return frameMirror.evaluate(expression, false).value();
|
| - }
|
| -
|
| - /** @return {undefined} */
|
| - function restart()
|
| - {
|
| - return frameMirror.restart();
|
| - }
|
| -
|
| - /**
|
| - * @param {number} scopeNumber
|
| - * @param {string} variableName
|
| - * @param {*} newValue
|
| - */
|
| - function setVariableValue(scopeNumber, variableName, newValue)
|
| - {
|
| - var scopeMirror = frameMirror.scope(scopeNumber);
|
| - if (!scopeMirror)
|
| - throw new Error("Incorrect scope index");
|
| - scopeMirror.setVariableValue(variableName, newValue);
|
| - }
|
| -
|
| - return {
|
| - "sourceID": sourceID,
|
| - "line": line,
|
| - "column": column,
|
| - "contextId": contextId,
|
| - "thisObject": thisObject,
|
| - "evaluate": evaluate,
|
| - "restart": restart,
|
| - "setVariableValue": setVariableValue,
|
| - "isAtReturn": isAtReturn,
|
| - "details": lazyDetails
|
| - };
|
| -}
|
| -
|
| -/**
|
| - * @param {number} scopeType
|
| - * @param {!Object} scopeObject
|
| - * @return {!Object|undefined}
|
| - */
|
| -DebuggerScript._buildScopeObject = function(scopeType, scopeObject)
|
| -{
|
| - var result;
|
| - switch (scopeType) {
|
| - case ScopeType.Local:
|
| - case ScopeType.Closure:
|
| - case ScopeType.Catch:
|
| - case ScopeType.Block:
|
| - case ScopeType.Script:
|
| - // For transient objects we create a "persistent" copy that contains
|
| - // the same properties.
|
| - // Reset scope object prototype to null so that the proto properties
|
| - // don't appear in the local scope section.
|
| - var properties = /** @type {!ObjectMirror} */(MakeMirror(scopeObject, true /* transient */)).properties();
|
| - // Almost always Script scope will be empty, so just filter out that noise.
|
| - // Also drop empty Block scopes, should we get any.
|
| - if (!properties.length && (scopeType === ScopeType.Script || scopeType === ScopeType.Block))
|
| - break;
|
| - result = { __proto__: null };
|
| - for (var j = 0; j < properties.length; j++) {
|
| - var name = properties[j].name();
|
| - if (name.length === 0 || name.charAt(0) === ".")
|
| - continue; // Skip internal variables like ".arguments" and variables with empty name
|
| - result[name] = properties[j].value_;
|
| - }
|
| - break;
|
| - case ScopeType.Global:
|
| - case ScopeType.With:
|
| - result = scopeObject;
|
| - break;
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -// We never resolve Mirror by its handle so to avoid memory leaks caused by Mirrors in the cache we disable it.
|
| -ToggleMirrorCache(false);
|
| -
|
| -return DebuggerScript;
|
| -})();
|
|
|