[emacs-w3m:13516] lexical-binding question

Katsumi Yamaoka <[email protected]>
Newsgroups gmane.emacs.w3m
Organization Emacsen advocacy group
Message-ID <[email protected]>
Hi,

Could anyone explain why this form works with no error?
(Note that I'm talking about the latest emacs-w3m code.)

(let ((w3m-input-coding-system 'binary))
  (with-temp-buffer
    (w3m-rendering-half-dump 'big5)))

The point is that this form substitutes the symbols `charset'
that are defined in the `w3m-halfdump-command-arguments' constant
with `big5' with no error occurring.

The following forms are utmost simplified model of the functions
that the above form uses:

--8<---------------cut here---------------start------------->8---
;; -*- lexical-binding: t -*-
(defun fn1 () ;; simplified `w3m-w3m-expand-arguments'
  (eval '`,charset))

(defun fn2 (charset) ;; simplified `w3m-rendering-half-dump'
  (ignore charset) ;; Silence the byte compiler.
  (fn1))

(defun fn3 (&optional charset) ;; simplified `w3m-rendering-buffer'
  (fn2 charset))
--8<---------------cut here---------------end--------------->8---

But, as you may see, (fn3 'big5) causes an error.  The difference
is that the symbol `charset' is boundp and can be examined the
value by `C-h v' when edebugging `w3m-w3m-expand-arguments' only
with the emacs-w3m code.

Thanks.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.