| Index: test/debugger/test-api.js
|
| diff --git a/test/debugger/test-api.js b/test/debugger/test-api.js
|
| index 1eabf5d228162a242e035f681623d610377e5732..2fe16c0a0fa9256555341bed40ce23a960ec9090 100644
|
| --- a/test/debugger/test-api.js
|
| +++ b/test/debugger/test-api.js
|
| @@ -450,8 +450,10 @@ class DebugWrapper {
|
| if (found == null) return { isUndefined : () => true };
|
|
|
| const val = { value : () => found.value.value };
|
| + // Not undefined in the sense that we did find a property, even though
|
| + // the value can be 'undefined'.
|
| return { value : () => val,
|
| - isUndefined : () => found.value.type == "undefined"
|
| + isUndefined : () => false,
|
| };
|
| }
|
|
|
| @@ -463,7 +465,30 @@ class DebugWrapper {
|
| const scope = this.propertiesToObject(serialized_scope);
|
| return { value : () => scope,
|
| property : (prop) =>
|
| - this.execStateScopeObjectProperty(serialized_scope, prop)
|
| + this.execStateScopeObjectProperty(serialized_scope, prop),
|
| + properties : () => serialized_scope.map(elem => elem.value),
|
| + propertyNames : () => serialized_scope.map(elem => elem.name)
|
| + };
|
| + }
|
| +
|
| + execStateScopeDetails(scope) {
|
| + var start_position;
|
| + var end_position
|
| + const start = scope.startLocation;
|
| + const end = scope.endLocation;
|
| + if (start) {
|
| + start_position = %ScriptLocationFromLine2(
|
| + parseInt(start.scriptId), start.lineNumber, start.columnNumber, 0)
|
| + .position;
|
| + }
|
| + if (end) {
|
| + end_position = %ScriptLocationFromLine2(
|
| + parseInt(end.scriptId), end.lineNumber, end.columnNumber, 0)
|
| + .position;
|
| + }
|
| + return { name : () => scope.name,
|
| + startPosition : () => start_position,
|
| + endPosition : () => end_position
|
| };
|
| }
|
|
|
| @@ -486,10 +511,13 @@ class DebugWrapper {
|
| execStateScope(frame, scope_index) {
|
| const scope = frame.scopeChain[scope_index];
|
| return { scopeType : () => this.execStateScopeType(scope.type),
|
| + scopeIndex : () => scope_index,
|
| + frameIndex : () => frame.callFrameId,
|
| scopeObject : () => this.execStateScopeObject(scope.object),
|
| setVariableValue :
|
| (name, value) => this.setVariableValue(frame, scope_index,
|
| - name, value)
|
| + name, value),
|
| + details : () => this.execStateScopeDetails(scope)
|
| };
|
| }
|
|
|
| @@ -659,6 +687,14 @@ class DebugWrapper {
|
| return this.reconstructRemoteObject(result);
|
| }
|
|
|
| + frameReceiver(frame) {
|
| + return this.reconstructRemoteObject(frame.this);
|
| + }
|
| +
|
| + frameReturnValue(frame) {
|
| + return this.reconstructRemoteObject(frame.returnValue);
|
| + }
|
| +
|
| execStateFrameRestart(frame) {
|
| const frameid = frame.callFrameId;
|
| const {msgid, msg} = this.createMessage(
|
| @@ -681,11 +717,12 @@ class DebugWrapper {
|
| scopes.push(this.execStateScope(frame, i));
|
| }
|
| return scopes;
|
| - };
|
| + }
|
|
|
| return { sourceColumn : () => column,
|
| sourceLine : () => line + 1,
|
| sourceLineText : () => loc.sourceText,
|
| + sourcePosition : () => loc.position,
|
| evaluate : (expr) => this.evaluateOnCallFrame(frame, expr),
|
| functionName : () => frame.functionName,
|
| func : () => func,
|
| @@ -693,14 +730,25 @@ class DebugWrapper {
|
| localCount : () => this.execStateFrameLocalCount(frame),
|
| localName : (ix) => this.execStateFrameLocalName(frame, ix),
|
| localValue: (ix) => this.execStateFrameLocalValue(frame, ix),
|
| - receiver : () => this.evaluateOnCallFrame(frame, "this"),
|
| + receiver : () => this.frameReceiver(frame),
|
| restart : () => this.execStateFrameRestart(frame),
|
| + returnValue : () => this.frameReturnValue(frame),
|
| scopeCount : () => frame.scopeChain.length,
|
| scope : (index) => this.execStateScope(frame, index),
|
| allScopes : allScopes.bind(this)
|
| };
|
| }
|
|
|
| + execStateEvaluateGlobal(expr) {
|
| + const {msgid, msg} = this.createMessage(
|
| + "Runtime.evaluate", { expression : expr });
|
| + this.sendMessage(msg);
|
| + const reply = this.takeReplyChecked(msgid);
|
| +
|
| + const result = reply.result.result;
|
| + return this.reconstructRemoteObject(result);
|
| + }
|
| +
|
| eventDataException(params) {
|
| switch (params.data.type) {
|
| case "string": {
|
| @@ -776,6 +824,8 @@ class DebugWrapper {
|
| // TODO(jgruber): Arguments as needed.
|
| let execState = { frames : params.callFrames,
|
| prepareStep : this.execStatePrepareStep.bind(this),
|
| + evaluateGlobal :
|
| + (expr) => this.execStateEvaluateGlobal(expr),
|
| frame : (index) => this.execStateFrame(
|
| index ? params.callFrames[index]
|
| : params.callFrames[0]),
|
|
|