]> git.eshelyaron.com Git - emacs.git/commitdiff
* cl-macs-tests.el (cl-macs-test--symbol-macrolet): New test
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 May 2019 21:16:36 +0000 (17:16 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 May 2019 21:16:36 +0000 (17:16 -0400)
test/lisp/emacs-lisp/cl-macs-tests.el

index 989553bd7bdc1b50a3ec33d66c8772dd9f509a13..09ce660a2fd683a8d035a52c8e53d671f6e98e1c 100644 (file)
@@ -513,4 +513,21 @@ collection clause."
    (macroexpand '(cl-defstruct (hash-table (:predicate hash-table-p))))
    :type 'wrong-type-argument))
 
+(ert-deftest cl-macs-test--symbol-macrolet ()
+  ;; A `setq' shouldn't be converted to a `setf' just because it occurs within
+  ;; a symbol-macrolet!
+  (should-error
+   ;; Use `eval' so the error is signaled when running the test rather than
+   ;; when macroexpanding it.
+   (eval '(let ((l (list 1))) (cl-symbol-macrolet ((x 1)) (setq (car l) 0)))))
+  ;; Make sure `gv-synthetic-place' isn't macro-expanded before `setf' gets to
+  ;; see its `gv-expander'.
+  (should (equal (let ((l '(0)))
+                   (let ((cl (car l)))
+                     (cl-symbol-macrolet
+                         ((p (gv-synthetic-place cl (lambda (v) `(setcar l ,v)))))
+                       (cl-incf p)))
+                   l)
+                 '(1))))
+
 ;;; cl-macs-tests.el ends here