From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel,gmane.emacs.w3m Subject: Re: bogus change(s) in cl-macs.el Date: Fri, 19 Nov 2004 02:10:55 -0500 Message-ID: <87d5yajs0c.fsf-monnier+emacs@gnu.org> References: NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1100848300 1573 80.91.229.6 (19 Nov 2004 07:11:40 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 19 Nov 2004 07:11:40 +0000 (UTC) Cc: snogglethorpe@gmail.com, emacs-devel@gnu.org, emacs-w3m@namazu.org, miles@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Nov 19 08:11:29 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1CV2vZ-0001ib-00 for ; Fri, 19 Nov 2004 08:11:29 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1CV34S-00068u-MM for ged-emacs-devel@m.gmane.org; Fri, 19 Nov 2004 02:20:40 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1CV346-00062e-Ld for emacs-devel@gnu.org; Fri, 19 Nov 2004 02:20:18 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1CV345-000629-Gy for emacs-devel@gnu.org; Fri, 19 Nov 2004 02:20:17 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1CV345-00061v-DY for emacs-devel@gnu.org; Fri, 19 Nov 2004 02:20:17 -0500 Original-Received: from [209.226.175.74] (helo=tomts20-srv.bellnexxia.net) by monty-python.gnu.org with esmtp (Exim 4.34) id 1CV2v2-00058G-C5; Fri, 19 Nov 2004 02:10:56 -0500 Original-Received: from alfajor ([67.71.119.192]) by tomts20-srv.bellnexxia.net (InterMail vM.5.01.06.10 201-253-122-130-110-20040306) with ESMTP id <20041119071055.HUUW2034.tomts20-srv.bellnexxia.net@alfajor>; Fri, 19 Nov 2004 02:10:55 -0500 Original-Received: by alfajor (Postfix, from userid 1000) id 7F81DD73A2; Fri, 19 Nov 2004 02:10:55 -0500 (EST) Original-To: Katsumi Yamaoka In-Reply-To: (Katsumi Yamaoka's message of "Fri, 19 Nov 2004 14:55:07 +0900") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (gnu/linux) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:30072 gmane.emacs.w3m:4552 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:30072 > I found the simplest way to explain the bug: > (macroexpand > '(labels ((FOO nil FOO-BODY) > (BAR nil BAR-BODY)) > (FOO) > (BAR))) > (let ((--cl---cl-var---- nil) > (--cl---cl-var---- nil)) > (progn > (progn > (set '--cl---cl-var---- #'(lambda nil BAR-BODY)) > (set '--cl---cl-var---- #'(lambda nil FOO-BODY))) > (funcall (symbol-value '--cl---cl-var----)) > (funcall (symbol-value '--cl---cl-var----)))) > One of two functions FOO and BAR is disregarded as you see. Well, actually we can't see it here because you haven't used print-gensym to distinguish symbols with the same name. But indeed: (labels ((foo nil 1) (bar nil 2)) (cons (foo) (bar))) returns (1 . 1). This is because cl's macro environment uses symbol names rather than symbols for symbol-macros, so if two symbols have the same name (i.e. `eq', not just `equal') and they both are symbol-macros, then CL screws up. I'm working on a patch for that. Stefan PS: A symbol-macro is a macro `foo' that is not triggered by (foo bla bla) but by a mere `foo'. E.g. (symbol-macrolet ((x (hello))) (+ x 1)) => (+ (hello 1))