Added variable types for the future (fix #66)

This commit is contained in:
WebFreak001 2016-07-10 17:05:56 +02:00
commit 2308f9f166
3 changed files with 34 additions and 21 deletions

View file

@ -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>;

View file

@ -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);

View file

@ -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 = {