diff options
| author | Nick Roberts | 2009-09-11 11:55:11 +0000 |
|---|---|---|
| committer | Nick Roberts | 2009-09-11 11:55:11 +0000 |
| commit | df1bfa9d0051bb00c02504400debe3f640e40ec9 (patch) | |
| tree | 49b41f373af738660860c0ce7263a0cb59f23d93 | |
| parent | ac243a409086b037dc49ca3f9b38aa1ab5f8606d (diff) | |
| download | emacs-df1bfa9d0051bb00c02504400debe3f640e40ec9.tar.gz emacs-df1bfa9d0051bb00c02504400debe3f640e40ec9.zip | |
(gdb-var-update-regexp): Delete.
(gdb-var-update-handler): Use json parsing.
| -rw-r--r-- | lisp/progmodes/gdb-mi.el | 22 |
1 files 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=\\(\"\"\\|\".*?[^\\]\"\\)\ | |||
| 1136 | (list "-var-update --all-values *" 'gdb-var-update-handler))) | 1136 | (list "-var-update --all-values *" 'gdb-var-update-handler))) |
| 1137 | (gdb-add-pending 'gdb-var-update)) | 1137 | (gdb-add-pending 'gdb-var-update)) |
| 1138 | 1138 | ||
| 1139 | (defconst gdb-var-update-regexp | ||
| 1140 | "{.*?name=\"\\(.*?\\)\".*?,\\(?:value=\\(\".*?\"\\),\\)?.*?\ | ||
| 1141 | in_scope=\"\\(.*?\\)\".*?}") | ||
| 1142 | |||
| 1143 | (defun gdb-var-update-handler () | 1139 | (defun gdb-var-update-handler () |
| 1140 | (let ((changelist (gdb-get-field (gdb-json-partial-output) 'changelist))) | ||
| 1144 | (dolist (var gdb-var-list) | 1141 | (dolist (var gdb-var-list) |
| 1145 | (setcar (nthcdr 5 var) nil)) | 1142 | (setcar (nthcdr 5 var) nil)) |
| 1146 | (goto-char (point-min)) | 1143 | (dolist (change changelist) |
| 1147 | (while (re-search-forward gdb-var-update-regexp nil t) | 1144 | (let* ((varnum (gdb-get-field change 'name)) |
| 1148 | (let* ((varnum (match-string 1)) | ||
| 1149 | (var (assoc varnum gdb-var-list))) | 1145 | (var (assoc varnum gdb-var-list))) |
| 1150 | (when var | 1146 | (when var |
| 1151 | (let ((match (match-string 3))) | 1147 | (let ((scope (gdb-get-field change 'in_scope))) |
| 1152 | (cond ((string-equal match "false") | 1148 | (cond ((string-equal scope "false") |
| 1153 | (if gdb-delete-out-of-scope | 1149 | (if gdb-delete-out-of-scope |
| 1154 | (gdb-var-delete-1 varnum) | 1150 | (gdb-var-delete-1 varnum) |
| 1155 | (setcar (nthcdr 5 var) 'out-of-scope))) | 1151 | (setcar (nthcdr 5 var) 'out-of-scope))) |
| 1156 | ((string-equal match "true") | 1152 | ((string-equal scope "true") |
| 1157 | (setcar (nthcdr 5 var) 'changed) | 1153 | (setcar (nthcdr 5 var) 'changed) |
| 1158 | (setcar (nthcdr 4 var) | 1154 | (setcar (nthcdr 4 var) |
| 1159 | (read (match-string 2)))) | 1155 | (gdb-get-field change 'value))) |
| 1160 | ((string-equal match "invalid") | 1156 | ((string-equal scope "invalid") |
| 1161 | (gdb-var-delete-1 varnum))))))) | 1157 | (gdb-var-delete-1 varnum)))))))) |
| 1162 | (gdb-delete-pending 'gdb-var-update) | 1158 | (gdb-delete-pending 'gdb-var-update) |
| 1163 | (gdb-speedbar-update)) | 1159 | (gdb-speedbar-update)) |
| 1164 | 1160 | ||