Subject: bug#57327: Bug in vhdl-mode design hierarchy extraction

From: Gonzalo Larumbe <[email-masked]>
Date: Sun, 21 Aug 2022 09:30:00 +0200

Hi,

First of all, thanks a lot for actively developing and maintaining Emacs.
It is something that makes me very happy in my daily work.

Some time ago I found a bug in vhdl-mode.el after trying to extract the
hierarchy in speedbar of the current design. The design I'm trying to parse
is the one based on the following repo:
- https://github.com/gmlarumbe/axi_if_converter

After opening the following file (*src/top/rtl/axi_if_converter.vhd*),
starting speedbar and pressing 'h' to get the hierarchy I get the following
error:
- WARNING:  ERROR:  Invalid hierarchy information, unable to display
correctly

When I first debugged this issue some time ago it seemed it had to do with
lexical-binding and the function `vhdl-speedbar-insert-hierarchy`. I made
some changes that made it work and could help debugging in a branch of my
emacs-mirror fork:
https://github.com/emacs-mirror/emacs/compare/master...gmlarumbe:emacs:vhdl-projects

Yesterday I also checked that vhdl-mode has received some updates since
then, some of them in this particular `vhdl-speedbar-insert-hierarchy`
function that actually had to do with lexical-binding (commit a769cbfcfb by
Eli Zaretskii). I made some new simple changes that I attach in a diff file
and seem to fix the issue. However, maybe the author/maintainer knows a
better way of fixing this.

Thanks a lot for your effort,

Best,

Gonzalo
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 39c5eb453b..18219db740 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -14958,8 +14958,8 @@ otherwise use cached data."
 
 (defun vhdl-speedbar-insert-hierarchy ( ent-alist-arg conf-alist-arg
                                         package-alist ent-inst-list depth)
-  "Insert hierarchy of ENT-ALIST, CONF-ALIST, and PACKAGE-ALIST."
-  (if (not (or ent-alist conf-alist package-alist))
+  "Insert hierarchy of ENT-ALIST-ARG, CONF-ALIST-ARG, and PACKAGE-ALIST."
+  (if (not (or ent-alist-arg conf-alist-arg package-alist))
       (vhdl-speedbar-make-title-line "No VHDL design units!" depth)
     (let ((ent-alist ent-alist-arg)
           (conf-alist conf-alist-arg)