emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/lisp/progmodes gdb-ui.el [EMACS_23_1_RC]


From: Nick Roberts
Subject: [Emacs-diffs] emacs/lisp/progmodes gdb-ui.el [EMACS_23_1_RC]
Date: Fri, 18 Sep 2009 00:39:21 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Branch:         EMACS_23_1_RC
Changes by:     Nick Roberts <nickrob>  09/09/18 00:39:21

Modified files:
        lisp/progmodes : gdb-ui.el 

Log message:
        (gdb-var-list): Add an element for has_more field.
        (gdb-var-create-handler, gdb-var-list-children-handler-1)
        (gdb-var-update-handler-1): Update correctly when elements are removed
        from STL collections.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/progmodes/gdb-ui.el?cvsroot=emacs&only_with_tag=EMACS_23_1_RC&r1=1.256.2.7&r2=1.256.2.8

Patches:
Index: gdb-ui.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/Attic/gdb-ui.el,v
retrieving revision 1.256.2.7
retrieving revision 1.256.2.8
diff -u -b -r1.256.2.7 -r1.256.2.8
--- gdb-ui.el   17 Sep 2009 05:24:08 -0000      1.256.2.7
+++ gdb-ui.el   18 Sep 2009 00:39:21 -0000      1.256.2.8
@@ -128,7 +128,7 @@
 (defvar gdb-current-language nil)
 (defvar gdb-var-list nil
   "List of variables in watch window.
-Each element has the form (VARNUM EXPRESSION NUMCHILD TYPE VALUE STATUS FP)
+Each element has the form (VARNUM EXPRESSION NUMCHILD TYPE VALUE STATUS 
HAS_MORE FP)
 where STATUS is nil (`unchanged'), `changed' or `out-of-scope', FP the frame
 address for root variables.")
 (defvar gdb-main-file nil "Source file from which program execution begins.")
@@ -851,21 +851,18 @@
 (defun gdb-var-create-handler (expr)
   (let* ((result (gdb-json-partial-output)))
     (if (not (bindat-get-field result 'msg))
-        (let*
-            ((has_more (bindat-get-field result 'has_more))
-            (var
-              (list
-               (bindat-get-field result 'name)
+        (let ((var
+              (list (bindat-get-field result 'name)
                (if (and (string-equal gdb-current-language "c")
                         gdb-use-colon-colon-notation gdb-selected-frame)
                    (setq expr (concat gdb-selected-frame "::" expr))
                  expr)
-              ;; Fake child for dynamic varobjs.
-              (if (string-equal (bindat-get-field result 'has_more) "1")
-                  "1" (bindat-get-field result 'numchild))
+                    (bindat-get-field result 'numchild)
                (bindat-get-field result 'type)
                (bindat-get-field result 'value)
-               nil)))
+                    nil
+                    (bindat-get-field result 'has_more)
+                     gdb-frame-address)))
          (push var gdb-var-list)
          (speedbar 1)
          (unless (string-equal
@@ -3817,12 +3814,15 @@
     `(lambda () (gdb-var-list-children-handler-1 ,varnum)))))
 
 (defun gdb-var-list-children-handler-1 (varnum)
-  (let ((var-list nil)
-       (children (bindat-get-field (gdb-json-partial-output "child") 
'children)))
+  (let* ((var-list nil)
+        (output (bindat-get-field (gdb-json-partial-output "child")))
+        (children (bindat-get-field output 'children)))
    (catch 'child-already-watched
       (dolist (var gdb-var-list)
        (if (string-equal varnum (car var))
            (progn
+             ;; With dynamic varobjs numchild may have increased.
+             (setcar (nthcdr 2 var) (bindat-get-field output 'numchild))
              (push var var-list)
              (dolist (child children)
                (let ((varchild (list (bindat-get-field child 'name)
@@ -3830,7 +3830,8 @@
                                      (bindat-get-field child 'numchild)
                                      (bindat-get-field child 'type)
                                      (bindat-get-field child 'value)
-                                     nil)))
+                                     nil
+                                     (bindat-get-field child 'has_more))))
                  (if (assoc (car varchild) gdb-var-list)
                      (throw 'child-already-watched nil))
                  (push varchild var-list))))
@@ -3858,45 +3859,56 @@
     (let ((temp-var-list gdb-var-list))
       (dolist (change changelist)
        (let* ((varnum (bindat-get-field change 'name))
-              (var (assoc varnum gdb-var-list)))
+              (var (assoc varnum gdb-var-list))
+              (new-num (bindat-get-field change 'new_num_children)))
          (when var
            (let ((scope (bindat-get-field change 'in_scope)))
              (cond ((string-equal scope "false")
                     (if gdb-delete-out-of-scope
                         (gdb-var-delete-1 var varnum)
                       (setcar (nthcdr 5 var) 'out-of-scope)))
-                   ((and (string-equal scope "true")
+                   ((string-equal scope "true")
+                    (setcar (nthcdr 6 var)
+                            (bindat-get-field change 'has_more))
+                    (when (and (string-equal (nth 6 var) "0")
+                               (not new-num)
                          (string-equal (nth 2 var) "0"))
-                    ;; Fake a child to create an expanable node.
-                    (if (string-equal (bindat-get-field change 'has_more) "1")
-                        (setcar (nthcdr 2 var) "1")
-                      (setcar (nthcdr 5 var) 'changed)
                       (setcar (nthcdr 4 var)
-                              (bindat-get-field change 'value))))
+                              (bindat-get-field change 'value))
+                      (setcar (nthcdr 5 var) 'changed)))
                    ((string-equal scope "invalid")
                     (gdb-var-delete-1 var varnum)))))
          (let ((var-list nil) var1
-               (new (bindat-get-field change 'new_num_children))
                (children (bindat-get-field change 'new_children)))
-           (if new
-               ;; Add new children to list.
+           (if new-num
                (progn
                  (setq var1 (pop temp-var-list))
                  (while var1
                    (if (string-equal varnum (car var1))
-                       (progn
+                       (let ((new (string-to-number new-num))
+                             (previous (string-to-number (nth 2 var1))))
+                         (setcar (nthcdr 2 var1) new-num)
                          (push var1 var-list)
-                         (dotimes (dummy (- (string-to-number new) (length 
children)))
-                           (progn
-                             (push (pop temp-var-list) var-list)))
+                         (cond ((> new previous)
+                                ;; Add new children to list.
+                                (dotimes (dummy previous)
+                                  (push (pop temp-var-list) var-list))
                          (dolist (child children)
-                           (let ((varchild (list (bindat-get-field child 'name)
+                                  (let ((varchild
+                                         (list (bindat-get-field child 'name)
                                                  (bindat-get-field child 'exp)
                                                  (bindat-get-field child 
'numchild)
                                                  (bindat-get-field child 'type)
                                                  (bindat-get-field child 
'value)
-                                                 'changed)))
+                                               'changed
+                                               (bindat-get-field child 
'has_more))))
                              (push varchild var-list))))
+                               ;; Remove deleted children from list.
+                               ((< new previous)
+                                (dotimes (dummy new)
+                                    (push (pop temp-var-list) var-list))
+                                (dotimes (dummy (- previous new))
+                                    (pop temp-var-list)))))
                      (push var1 var-list))
                    (setq var1 (pop temp-var-list)))
                  (setq gdb-var-list (nreverse var-list)))))))))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]