[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#54990: Byte compiler bug
From: |
Alan Mackenzie |
Subject: |
bug#54990: Byte compiler bug |
Date: |
Mon, 18 Apr 2022 10:48:43 +0000 |
Hello, Mattias.
On Sun, Apr 17, 2022 at 16:32:53 +0200, Mattias Engdegård wrote:
> This is related to symbol positioning so Alan should be well-placed to
> debug it. (The symbol names are irrelevant.)
I'd got just as far as identifying the merge of
scratch/correct-warning-pos as the first version containing the bug.
> It's `compile-defun` that is broken; the constant vector of the
> resulting bytecode contains symbols with position as hash table keys
> for a switch operation. Compare the bytecode object with that from
> `byte-compile` which works correctly:
Thank you for this observation. It was _exceptionally_ helpful.
> (defun tata (x)
> (cond
> ((eq x 'a) 'toto)
> ((eq x 'b) 'titi)))
> (byte-compile 'tata)
> =>
> #[257 "..." [#s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold
> 0.8125 purecopy t data (a 6 b 8)) toto titi nil] 3 "..."]
> ;; if using `compile-defun` on `tata`:
> (symbol-function 'tata)
> #[257 "..." [#s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold
> 0.8125 purecopy t data (#<symbol a at 293> 6 #<symbol b at 314> 8)) toto titi
> nil] 3 "..."]
I've committed a fix, which I'm pretty sure works, so I'm closing the bug
with this post. Thanks again for the help!
--
Alan Mackenzie (Nuremberg, Germany).