emacs-evil / evil

The extensible vi layer for Emacs.
GNU General Public License v3.0
3.29k stars 275 forks source link

Compile Error: List contains a loop: (lower-right lower-left upper-left upper-right #1903

Open condy0919 opened 1 month ago

condy0919 commented 1 month ago

Issue type

Environment

Emacs version: GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0) of 2024-05-23

Operating System: ArchLinux Evil version: Evil version 1.15.0 Evil installation type: MELPA Graphical/Terminal: GUI on X Tested in a make emacs session (see CONTRIBUTING.md): No

Reproduction steps

Expected behavior

No errors during byte-comp.

Actual behavior

byte-compiler complains

List contains a loop: (lower-right lower-left upper-left upper-right lower-right lower-left upper-left upper-right lower-right lower-left . #6) 

Further notes

(evil-define-command evil-visual-rotate (corner &optional beg end type)
  "Move point to CORNER of the Visual selection.
Corner may be one of `upper-left', `upper-right', `lower-left' and
`lower-right':

    upper-left +---+ upper-right
               |   |
    lower-left +---+ lower-right

When called interactively, the selection is rotated clockwise."
  :keep-visual t
  (interactive
   (let ((corners '#1=(upper-left upper-right lower-right lower-left . #1#)))
     (list (cadr (memq (evil-visual-block-corner) corners)))))
  (let* ((beg (or beg (point)))
         (end (or end (mark t) beg))
         (type (or type evil-this-type))
         range)
    (cond
     ((memq type '(rectangle block))
      (setq range (evil-block-rotate beg end :corner corner)
            beg (pop range)
            end (pop range))
      (unless (eq corner (evil-visual-block-corner corner beg end))
        (evil-swap beg end))
      (goto-char beg)
      (when (evil-visual-state-p)
        (evil-move-mark end)
        (evil-visual-refresh nil nil nil :corner corner)))
     ((memq corner '(upper-right lower-right))
      (goto-char (max beg end))
      (when (evil-visual-state-p)
        (evil-move-mark (min beg end))))
     (t
      (goto-char (min beg end))
      (when (evil-visual-state-p)
        (evil-move-mark (max beg end)))))))

The variable corners uses an recursive ref #1 in it's definition.

axelf4 commented 1 month ago

Huh, since when is that not allowed? I get no warnings on GNU Emacs 29.3.

condy0919 commented 1 month ago

Huh, since when is that not allowed? I get no warnings on GNU Emacs 29.3.

Emacs 30 complains.