From 2cb16e2b9ea9791c09f72f456ec30fd32603ec63 Mon Sep 17 00:00:00 2001 From: WebFreak001 Date: Sat, 27 Feb 2016 20:08:28 +0100 Subject: [PATCH] Made value arrays parsable by vscode --- src/backend/gdb_expansion.ts | 15 +++++--- test/gdb_expansion.test.ts | 75 +++++++++++++++++++++++++----------- 2 files changed, 62 insertions(+), 28 deletions(-) diff --git a/src/backend/gdb_expansion.ts b/src/backend/gdb_expansion.ts index 3bc195e..f804935 100644 --- a/src/backend/gdb_expansion.ts +++ b/src/backend/gdb_expansion.ts @@ -65,7 +65,7 @@ export function expandValue(variableCreate: Function, value: string): any { return str; }; - let parseValue, parseCommaResult, parseCommaValue, parseResult; + let parseValue, parseCommaResult, parseCommaValue, parseResult, createValue; let parseTupleOrList = () => { value = value.trim(); @@ -84,10 +84,11 @@ export function expandValue(variableCreate: Function, value: string): any { if (newValPos != -1 && eqPos > newValPos || eqPos == -1) { // is value list let values = []; let val = parseValue(); - values.push(val); + values.push(createValue("[0]", val)); let remaining = value; + let i = 0; while (val = parseCommaValue()) - values.push(val); + values.push(createValue("[" + (++i) + "]", val)); value = value.substr(1).trim(); // } return values; } @@ -163,17 +164,21 @@ export function expandValue(variableCreate: Function, value: string): any { value = value.substr(variableMatch[0].length).trim(); let variable = variableMatch[1]; let val = parseValue(); + return createValue(variable, val); + }; + + createValue = (name, val) => { let ref = 0; if (typeof val == "object") { ref = variableCreate(val); val = "Object"; } if (typeof val == "string" && val.startsWith("*0x")) { - ref = variableCreate("*" + variable); + ref = variableCreate("*" + name); val = "Object@" + val; } return { - name: variable, + name: name, value: val, variablesReference: ref }; diff --git a/test/gdb_expansion.test.ts b/test/gdb_expansion.test.ts index 0553933..e578979 100644 --- a/test/gdb_expansion.test.ts +++ b/test/gdb_expansion.test.ts @@ -27,15 +27,38 @@ suite("GDB Value Expansion", () => { }]); assert.strictEqual(isExpandable(`{{a = b}}`), 1); assert.deepEqual(expandValue(variableCreate, `{{a = b}}`), [ - [ - { - name: "a", - value: "b", - variablesReference: 0 + { + name: "[0]", + value: "Object", + variablesReference: { + expanded: [ + { + name: "a", + value: "b", + variablesReference: 0 + } + ] } - ] + } ]); - assert.deepEqual(expandValue(variableCreate, `{1, 2, 3, 4}`), [1, 2, 3, 4]); + assert.deepEqual(expandValue(variableCreate, `{1, 2, 3, 4}`), [ + { + name: "[0]", + value: "1", + variablesReference: 0 + }, { + name: "[1]", + value: "2", + variablesReference: 0 + }, { + name: "[2]", + value: "3", + variablesReference: 0 + }, { + name: "[3]", + value: "4", + variablesReference: 0 + }]); }); test("Error values", () => { assert.strictEqual(isExpandable(``), 0); @@ -90,23 +113,29 @@ suite("GDB Value Expansion", () => { value: "Object", variablesReference: { expanded: [ - [ - { - name: "view", - value: "Object@*0x7ffff7ece1e8", - variablesReference: { expanded: "*view" } - }, - { - name: "renderer", - value: "Object@*0x7ffff7eccc50", - variablesReference: { expanded: "*renderer" } - }, - { - name: "world", - value: "Object@*0x7ffff7ece480", - variablesReference: { expanded: "*world" } + { + name: "[0]", + value: "Object", + variablesReference: { + expanded: [ + { + name: "view", + value: "Object@*0x7ffff7ece1e8", + variablesReference: { expanded: "*view" } + }, + { + name: "renderer", + value: "Object@*0x7ffff7eccc50", + variablesReference: { expanded: "*renderer" } + }, + { + name: "world", + value: "Object@*0x7ffff7ece480", + variablesReference: { expanded: "*world" } + } + ] } - ] + } ] } },