# HG changeset patch # User Nick Roberts # Date 1252670111 0 # Node ID 34d2d71d540fb4e333728849a958d12ea54ede0e # Parent 7a82898e4c329167a6098a65b1f339b53899e9c4 (gdb-var-update-regexp): Delete. (gdb-var-update-handler): Use json parsing. diff -r 7a82898e4c32 -r 34d2d71d540f lisp/progmodes/gdb-mi.el --- a/lisp/progmodes/gdb-mi.el Fri Sep 11 11:54:30 2009 +0000 +++ b/lisp/progmodes/gdb-mi.el Fri Sep 11 11:55:11 2009 +0000 @@ -1136,29 +1136,25 @@ (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))