bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#24641: 26.0.50; let-alist: Incorrect byte-compile warning about unus


From: npostavs
Subject: bug#24641: 26.0.50; let-alist: Incorrect byte-compile warning about unused lexical variable
Date: Sat, 08 Oct 2016 09:09:52 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

retitle 24641 let-alist redundantly binds variables already bound by nested 
let-alist calls
severity 24641 minor
tags 24641 confirmed
quit

Philipp <p.stephani2@gmail.com> writes:

> $ cat /tmp/letalist.el 
> ;; -*- lexical-binding: t; -*-
> (print
>  (let-alist '((outer . ((inner . value))))
>    (let-alist .outer .inner)))
>    
> $ emacs -Q -batch -f batch-byte-compile /tmp/letalist.el 
>
> In toplevel form:
> /tmp/letalist.el:2:1:Warning: Unused lexical variable ‘\.inner’
>
> This warning is incorrect because '.inner' is used in the inner
> let-alist form.

The byte compiler warning correct, the problem is in let-alist: both the
outer and inner let-alist calls let-bind '.inner'.  Here is the
macroexpansion:

(let
    ((#1=#:alist
      '((outer
         (inner . value)))))
  (let
      ((\.outer
        (cdr
         (assq 'outer #1#)))
       (\.inner ; <------------ this one is unused
        (cdr
         (assq 'inner #1#))))
    (let
        ((#2=#:alist \.outer))
      (let
          ((\.inner
            (cdr
             (assq 'inner #2#))))
        \.inner))))





reply via email to

[Prev in Thread] Current Thread [Next in Thread]