Added variable types for the future (fix #66)
This commit is contained in:
parent
d704af2501
commit
2308f9f166
3 changed files with 34 additions and 21 deletions
|
|
@ -14,6 +14,12 @@ export interface Stack {
|
|||
line: number;
|
||||
}
|
||||
|
||||
export interface Variable {
|
||||
name: string;
|
||||
valueStr: string;
|
||||
type: string;
|
||||
}
|
||||
|
||||
export interface SSHArguments {
|
||||
forwardX11: boolean;
|
||||
host: string;
|
||||
|
|
@ -46,7 +52,7 @@ export interface IBackend {
|
|||
removeBreakPoint(breakpoint: Breakpoint): Thenable<boolean>;
|
||||
clearBreakPoints(): Thenable<any>;
|
||||
getStack(maxLevels: number): Thenable<Stack[]>;
|
||||
getStackVariables(thread: number, frame: number): Thenable<[string, string][]>;
|
||||
getStackVariables(thread: number, frame: number): Thenable<Variable[]>;
|
||||
evalExpression(name: string): Thenable<any>;
|
||||
isReady(): boolean;
|
||||
changeVariable(name: string, rawValue: string): Thenable<any>;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { Breakpoint, IBackend, Stack, SSHArguments } from "../backend.ts"
|
||||
import { Breakpoint, IBackend, Stack, SSHArguments, Variable } from "../backend.ts"
|
||||
import * as ChildProcess from "child_process"
|
||||
import { EventEmitter } from "events"
|
||||
import { parseMI, MINode } from '../mi_parse';
|
||||
|
|
@ -536,15 +536,20 @@ export class MI2 extends EventEmitter implements IBackend {
|
|||
});
|
||||
}
|
||||
|
||||
getStackVariables(thread: number, frame: number): Thenable<[string, string][]> {
|
||||
getStackVariables(thread: number, frame: number): Thenable<Variable[]> {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.sendCommand("stack-list-variables --thread " + thread + " --frame " + frame + " --simple-values").then((result) => {
|
||||
let variables = result.result("variables");
|
||||
let ret: [string, string][] = [];
|
||||
let ret: Variable[] = [];
|
||||
variables.forEach(element => {
|
||||
const key = MINode.valueOf(element, "name");
|
||||
const value = MINode.valueOf(element, "value");
|
||||
ret.push([key, value]);
|
||||
const type = MINode.valueOf(element, "type");
|
||||
ret.push({
|
||||
name: key,
|
||||
valueStr: value,
|
||||
type: type
|
||||
});
|
||||
});
|
||||
resolve(ret);
|
||||
}, reject);
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ export class MI2DebugSession extends DebugSession {
|
|||
}
|
||||
|
||||
protected variablesRequest(response: DebugProtocol.VariablesResponse, args: DebugProtocol.VariablesArguments): void {
|
||||
const variables = [];
|
||||
const variables: DebugProtocol.Variable[] = [];
|
||||
const id = this.variableHandles.get(args.variablesReference);
|
||||
|
||||
let createVariable = (arg) => {
|
||||
|
|
@ -217,24 +217,26 @@ export class MI2DebugSession extends DebugSession {
|
|||
if (id.startsWith("@frame:")) {
|
||||
this.miDebugger.getStackVariables(this.threadID, parseInt(id.substr("@frame:".length))).then(stack => {
|
||||
stack.forEach(variable => {
|
||||
if (variable[1] !== undefined) {
|
||||
let expanded = expandValue(createVariable, "{" + variable[0] + "=" + variable[1] + ")");
|
||||
if (!expanded)
|
||||
new OutputEvent("Could not expand " + variable[1] + "\n", "stderr");
|
||||
else if (typeof expanded[0] == "string")
|
||||
expanded = [
|
||||
{
|
||||
name: "<value>",
|
||||
value: prettyStringArray(expanded),
|
||||
variablesReference: 0
|
||||
}
|
||||
];
|
||||
variables.push(expanded[0]);
|
||||
if (variable.valueStr !== undefined) {
|
||||
let expanded = expandValue(createVariable, "{" + variable.name + "=" + variable.valueStr + ")");
|
||||
if (expanded)
|
||||
{
|
||||
if (typeof expanded[0] == "string")
|
||||
expanded = [
|
||||
{
|
||||
name: "<value>",
|
||||
value: prettyStringArray(expanded),
|
||||
variablesReference: 0
|
||||
}
|
||||
];
|
||||
variables.push(expanded[0]);
|
||||
}
|
||||
} else
|
||||
variables.push({
|
||||
name: variable[0],
|
||||
name: variable.name,
|
||||
type: variable.type,
|
||||
value: "<unknown>",
|
||||
variablesReference: createVariable(variable[0])
|
||||
variablesReference: createVariable(variable.name)
|
||||
});
|
||||
});
|
||||
response.body = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue