From 346c4d0e2f63a9ace3b2771eee2f1eef6ef41c7f Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Tue, 27 Sep 2016 17:43:14 +0200 Subject: [PATCH] #97, upstream fix, properties values containing escaped double quotes --- src/ce_gdb.pas | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/ce_gdb.pas b/src/ce_gdb.pas index 1c333bb1..795805fa 100644 --- a/src/ce_gdb.pas +++ b/src/ce_gdb.pas @@ -42,7 +42,7 @@ type TSetGprEvent = procedure(reg: TCpuRegister; val: TCpuRegValue) of object; - // Makes a category for the general purpose registers in a project inspector + // Makes a category for the general purpose registers in a object inspector TInspectableGPR = class(TPersistent) private fRegisters: array[TCpuRegister] of TCpuRegValue; @@ -83,7 +83,7 @@ type procedure setInspectableRegister(index: TCpuRegister; value: PtrUInt); end; - // Makes a category for the floating point coprocessor registers in a project inspector + // Makes a category for the floating point coprocessor registers in a object inspector TInspectableFPR = class(TPersistent) private fRegisters: array[TFpuRegister] of double; @@ -100,7 +100,7 @@ type procedure setInspectableRegister(index: TFpuRegister; value: double); end; - // Makes a category for the SSE registers in a project inspector + // Makes a category for the SSE registers in a object inspector TInspectableSSER = class(TPersistent) // interpretation is a problem: // 4 int ? 2 double ? 4 single ? ... @@ -894,7 +894,24 @@ procedure parseGdbout(const str: string; var json: TJSONObject); end; '"': begin - node.Strings[idt] := r^.popFront^.takeUntil('"').yield; + v := ''; + r^.popFront; + while true do + begin + v += r^.takeUntil(['"','\']).yield; + if r^.front = '\' then + begin + v += '\'; + r^.popFront; + if r^.front = '"' then + begin + r^.popFront; + v += '"'; + end; + end else + break; + end; + node.Strings[idt] := v; r^.popFront; end; '{':