summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Roberts <nickrob@snap.net.nz>2009-09-12 00:03:29 +0000
committerNick Roberts <nickrob@snap.net.nz>2009-09-12 00:03:29 +0000
commit51908af6af60ca2dd1c51de3febd741ee1834f4f (patch)
tree901078d2f10cfeee5786efd4a0468f95f6bff00a
parentdad61164c93ac4ea576df662374ec5fafc365a0a (diff)
downloademacs-51908af6af60ca2dd1c51de3febd741ee1834f4f.tar.gz
(gdb-var-list-children-regexp): Delete.
(gdb-var-list-children): Use json parsing.
-rw-r--r--lisp/progmodes/gdb-mi.el23
1 files changed, 9 insertions, 14 deletions
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 17e0c1c8872..dcf154da788 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1054,25 +1054,20 @@ With arg, enter name of variable to be watched in the minibuffer."
varnum)
`(lambda () (gdb-var-list-children-handler ,varnum)))))
-(defconst gdb-var-list-children-regexp
- "child={.*?name=\"\\(.+?\\)\".*?,exp=\"\\(.+?\\)\".*?,\
-numchild=\"\\(.+?\\)\".*?,value=\\(\"\"\\|\".*?[^\\]\"\\)\
-\\(}\\|.*?,\\(type=\"\\(.+?\\)\"\\)?.*?}\\)")
-
(defun gdb-var-list-children-handler (varnum)
- (goto-char (point-min))
- (let ((var-list nil))
- (catch 'child-already-watched
+ (let ((var-list nil)
+ (children (gdb-get-field (gdb-json-partial-output "child") 'children)))
+ (catch 'child-already-watched
(dolist (var gdb-var-list)
(if (string-equal varnum (car var))
(progn
(push var var-list)
- (while (re-search-forward gdb-var-list-children-regexp nil t)
- (let ((varchild (list (match-string 1)
- (match-string 2)
- (match-string 3)
- (match-string 7)
- (read (match-string 4))
+ (dolist (child children)
+ (let ((varchild (list (gdb-get-field child 'name)
+ (gdb-get-field child 'exp)
+ (gdb-get-field child 'numchild)
+ (gdb-get-field child 'type)
+ (gdb-get-field child 'value)
nil)))
(if (assoc (car varchild) gdb-var-list)
(throw 'child-already-watched nil))