From df1bfa9d0051bb00c02504400debe3f640e40ec9 Mon Sep 17 00:00:00 2001 From: Nick Roberts Date: Fri, 11 Sep 2009 11:55:11 +0000 Subject: [PATCH] (gdb-var-update-regexp): Delete. (gdb-var-update-handler): Use json parsing. --- lisp/progmodes/gdb-mi.el | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 09290deb905..17e0c1c8872 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -1136,29 +1136,25 @@ numchild=\"\\(.+?\\)\".*?,value=\\(\"\"\\|\".*?[^\\]\"\\)\ (list "-var-update --all-values *" 'gdb-var-update-handler))) (gdb-add-pending 'gdb-var-update)) -(defconst gdb-var-update-regexp - "{.*?name=\"\\(.*?\\)\".*?,\\(?:value=\\(\".*?\"\\),\\)?.*?\ -in_scope=\"\\(.*?\\)\".*?}") - (defun gdb-var-update-handler () + (let ((changelist (gdb-get-field (gdb-json-partial-output) 'changelist))) (dolist (var gdb-var-list) (setcar (nthcdr 5 var) nil)) - (goto-char (point-min)) - (while (re-search-forward gdb-var-update-regexp nil t) - (let* ((varnum (match-string 1)) + (dolist (change changelist) + (let* ((varnum (gdb-get-field change 'name)) (var (assoc varnum gdb-var-list))) (when var - (let ((match (match-string 3))) - (cond ((string-equal match "false") + (let ((scope (gdb-get-field change 'in_scope))) + (cond ((string-equal scope "false") (if gdb-delete-out-of-scope (gdb-var-delete-1 varnum) (setcar (nthcdr 5 var) 'out-of-scope))) - ((string-equal match "true") + ((string-equal scope "true") (setcar (nthcdr 5 var) 'changed) (setcar (nthcdr 4 var) - (read (match-string 2)))) - ((string-equal match "invalid") - (gdb-var-delete-1 varnum))))))) + (gdb-get-field change 'value))) + ((string-equal scope "invalid") + (gdb-var-delete-1 varnum)))))))) (gdb-delete-pending 'gdb-var-update) (gdb-speedbar-update)) -- 2.39.2