]> git.eshelyaron.com Git - emacs.git/commitdiff
Ensure that getters and setters can be edebugged at the same time.
authorPhilipp Stephani <phst@google.com>
Sun, 14 Jun 2020 16:18:13 +0000 (18:18 +0200)
committerPhilipp Stephani <phst@google.com>
Sun, 14 Jun 2020 16:18:13 +0000 (18:18 +0200)
It's necessary to add a name suffix to setters defined with
'gv-define-setter' so that Edebug can distinguish between the getter
and the setter (Bug#41853).

* lisp/emacs-lisp/gv.el (gv-define-setter): Add a name suffix to
setter definitions.

* test/lisp/emacs-lisp/gv-tests.el (gv-setter-edebug): New regression
test.

lisp/emacs-lisp/gv.el
test/lisp/emacs-lisp/gv-tests.el

index 096036a0ffa1017080b00564b592a479a70b369e..513bd3288990824deb1118b86d55d9c143bb9362 100644 (file)
@@ -224,7 +224,7 @@ The first arg in ARGLIST (the one that receives VAL) receives an expression
 which can do arbitrary things, whereas the other arguments are all guaranteed
 to be pure and copyable.  Example use:
   (gv-define-setter aref (v a i) \\=`(aset ,a ,i ,v))"
-  (declare (indent 2) (debug (&define name sexp def-body)))
+  (declare (indent 2) (debug (&define name :name gv-setter sexp def-body)))
   `(gv-define-expander ,name
      (lambda (do &rest args)
        (declare-function
index 7fa4cd50b0828acaf21541782f3d3379d76d6fe2..7a8402be074e1952117cadd42a461080dfec8f43 100644 (file)
@@ -19,6 +19,7 @@
 
 ;;; Code:
 
+(require 'edebug)
 (require 'ert)
 (eval-when-compile (require 'cl-lib))
 
       (should (equal (buffer-string)
                      "Symbol's function definition is void: \\(setf\\ gv-test-foo\\)\n")))))
 
+(ert-deftest gv-setter-edebug ()
+  "Check that a setter can be defined and edebugged together with
+its getter (Bug#41853)."
+  (with-temp-buffer
+    (let ((edebug-all-defs t)
+          (edebug-initial-mode 'Go-nonstop))
+      (dolist (form '((defun gv-setter-edebug-help (b) b)
+                      (defun gv-setter-edebug-get (a b)
+                        (get a (gv-setter-edebug-help b)))
+                      (gv-define-setter gv-setter-edebug-get (x a b)
+                        `(setf (get ,a (gv-setter-edebug-help ,b)) ,x))
+                      (push 123 (gv-setter-edebug-get 'gv-setter-edebug
+                                                      'gv-setter-edebug-prop))))
+        (print form (current-buffer)))
+      ;; Only check whether evaluation works in general.
+      (eval-buffer)))
+  (should (equal (get 'gv-setter-edebug 'gv-setter-edebug-prop) '(123))))
+
 ;; `ert-deftest' messes up macroexpansion when the test file itself is
 ;; compiled (see Bug #24402).