From unknown Thu Aug 14 21:52:36 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#26601 <26601@debbugs.gnu.org> To: bug#26601 <26601@debbugs.gnu.org> Subject: Status: 26.0.50; Improvements to cl-symbol-macrolet Reply-To: bug#26601 <26601@debbugs.gnu.org> Date: Fri, 15 Aug 2025 04:52:36 +0000 retitle 26601 26.0.50; Improvements to cl-symbol-macrolet reassign 26601 emacs submitter 26601 npostavs@users.sourceforge.net severity 26601 wishlist tag 26601 patch fixed thanks From debbugs-submit-bounces@debbugs.gnu.org Fri Apr 21 23:58:09 2017 Received: (at submit) by debbugs.gnu.org; 22 Apr 2017 03:58:09 +0000 Received: from localhost ([127.0.0.1]:33108 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d1mBU-0003pF-RU for submit@debbugs.gnu.org; Fri, 21 Apr 2017 23:58:09 -0400 Received: from eggs.gnu.org ([208.118.235.92]:33002) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d1mBT-0003p3-Cs for submit@debbugs.gnu.org; Fri, 21 Apr 2017 23:58:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d1mBM-0006ZH-LG for submit@debbugs.gnu.org; Fri, 21 Apr 2017 23:58:02 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:58913) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d1mBM-0006Yo-HX for submit@debbugs.gnu.org; Fri, 21 Apr 2017 23:58:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52203) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d1mBK-0005ET-PE for bug-gnu-emacs@gnu.org; Fri, 21 Apr 2017 23:58:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d1mBH-0006Xo-NE for bug-gnu-emacs@gnu.org; Fri, 21 Apr 2017 23:57:58 -0400 Received: from mail-it0-x22b.google.com ([2607:f8b0:4001:c0b::22b]:35983) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d1mBH-0006Xh-Fo for bug-gnu-emacs@gnu.org; Fri, 21 Apr 2017 23:57:55 -0400 Received: by mail-it0-x22b.google.com with SMTP id g66so7159228ite.1 for ; Fri, 21 Apr 2017 20:57:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:mime-version; bh=3GrNtp/83HfGpuuH30dsjRoQM7010xjmEgPask8An/Q=; b=c/Y5OqzJNflPlUoyt6zPBSvGhgF4LgPE5BmEU5vbxUuGQuEf11RTO+CPnLlISNNnDb Tq/PO9NjQ47+JNWuiYOZZ4cGJrpOmr8lTGt5B0rNllki21uhx0FHnCEUsEruUaoMrK0K uVizpqEgavcd9xf/aly9W/Acd3g3SbZX9loAIHuEAkD7wZL/gHl7VvR0KCCJUaaQFIx/ LbKfi/id//crse2KLvXoVnA6jdJwzkLJ+NHXCvK3ycHCBMVyKqUdmXF2VCPR3grTTn55 2rtqdEkeISYXgJhOC/jdp2UjnqkugvQbQZM7kg20ImPrO106sY/5Dp35Ue1t10ZFsG/S SPrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :mime-version; bh=3GrNtp/83HfGpuuH30dsjRoQM7010xjmEgPask8An/Q=; b=XZkoUczte5/Zsc7tQm/cyd5HQrLQKBWHzkr+qFWxCrsagd7RF2qHTbmedrIrg0yEpT 5An0fTInYha7ow7qAkYB/B6xj5NCIsKQyt6uK760VamRvqdWqJ3A/GFjUKvdVEscuhZK n5n/uUBZbZ9kgGh9r0HNSdjGJLdUu1DX755SiiGHYkPx/eQZpImE83Zf9QcqJqtzqBC9 Ouevbm+iC061NKDIbQg8/8qjidmP8tEsPeiLaXu3EGwfnGK3iwQoraHC2HpasibFB0Rm 5KL8hPhWHblZ4Jm3TSrILYQ4hweMDAKeCzDMVhtc+YhZ/aLG7dXocUOaaY9kPVGXpTEi V1/g== X-Gm-Message-State: AN3rC/4ZCN8RHikD1zvN3NMP9+Xw++xaSxQAt6AljS8uMF9GaPY3GXwv a9Ze807cMw6iwEON X-Received: by 10.36.87.84 with SMTP id u81mr2180297ita.40.1492833474585; Fri, 21 Apr 2017 20:57:54 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id r72sm4966267ioi.4.2017.04.21.20.57.53 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 21 Apr 2017 20:57:53 -0700 (PDT) From: npostavs@users.sourceforge.net To: bug-gnu-emacs@gnu.org Subject: 26.0.50; Improvements to cl-symbol-macrolet X-Debbugs-CC: Stefan Monnier Date: Fri, 21 Apr 2017 23:59:23 -0400 Message-ID: <874lxhqehw.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -3.8 (---) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.8 (---) --=-=-= Content-Type: text/plain Severity: wishlist Tags: patch I was looking at the recent fix for #26325 [1: 89898e43c7], and I think splitting the variable bindings from the main macro environment will simplify things: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=v1-0001-Split-variable-macro-env-from-function-env.patch Content-Description: patch >From d0233406d88f712041f8307e837b9f4f95f17c4b Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Fri, 21 Apr 2017 23:37:05 -0400 Subject: [PATCH v1] Split variable macro env from function env * lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand): Remove. (cl-symbol-macrolet): Instead of adding each binding directly into the main environment with a special key format, put all symbol macro bindings into a single entry in the main environment under `:cl-symbol-macros'. (cl--sm-macroexpand): Look up symbol bindings in the `:cl-symbol-macros' entry of the environment. --- lisp/emacs-lisp/cl-macs.el | 64 ++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index db1518ce61..b1ada00f4a 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2047,28 +2047,22 @@ cl--old-macroexpand cl--old-macroexpand (symbol-function 'macroexpand))) -(defun cl--symbol-macro-key (sym) - "Return the key used in `macroexpand-all-environment' for symbol macro SYM." - ;; In the past we've used `symbol-name' instead, but that doesn't - ;; preserve the `eq'uality between different symbols of the same name. - `(:cl-symbol-macro . ,sym)) - (defun cl--sm-macroexpand (exp &optional env) "Special macro expander used inside `cl-symbol-macrolet'. This function replaces `macroexpand' during macro expansion of `cl-symbol-macrolet', and does the same thing as `macroexpand' except that it additionally expands symbol macros." - (let ((macroexpand-all-environment env)) + (let ((macroexpand-all-environment env) + (venv (alist-get :cl-symbol-macros env))) (while (progn (setq exp (funcall cl--old-macroexpand exp env)) (pcase exp ((pred symbolp) ;; Perform symbol-macro expansion. - ;; FIXME: Calling `cl--symbol-macro-key' for every var reference - ;; is a bit more costly than I'd like. - (when (cdr (assoc (cl--symbol-macro-key exp) env)) - (setq exp (cadr (assoc (cl--symbol-macro-key exp) env))))) + (let ((symval (assq exp venv))) + (when symval + (setq exp (cadr symval))))) (`(setq . ,_) ;; Convert setq to setf if required by symbol-macro expansion. (let* ((args (mapcar (lambda (f) (cl--sm-macroexpand f env)) @@ -2086,7 +2080,7 @@ cl--sm-macroexpand (let ((letf nil) (found nil) (nbs ())) (dolist (binding bindings) (let* ((var (if (symbolp binding) binding (car binding))) - (sm (assoc (cl--symbol-macro-key var) env))) + (sm (assq var venv))) (push (if (not (cdr sm)) binding (let ((nexp (cadr sm))) @@ -2144,30 +2138,28 @@ cl-symbol-macrolet \(fn ((NAME EXPANSION) ...) FORM...)" (declare (indent 1) (debug ((&rest (symbolp sexp)) cl-declarations body))) - (cond - ((cdr bindings) - `(cl-symbol-macrolet (,(car bindings)) - (cl-symbol-macrolet ,(cdr bindings) ,@body))) - ((null bindings) (macroexp-progn body)) - (t - (let ((previous-macroexpand (symbol-function 'macroexpand))) - (unwind-protect - (progn - (fset 'macroexpand #'cl--sm-macroexpand) - (let ((expansion - ;; FIXME: For N bindings, this will traverse `body' N times! - (macroexpand-all (macroexp-progn body) - (cons (list (cl--symbol-macro-key - (caar bindings)) - (cl-cadar bindings)) - macroexpand-all-environment)))) - (if (or (null (cdar bindings)) (cl-cddar bindings)) - (macroexp--warn-and-return - (format-message "Malformed `cl-symbol-macrolet' binding: %S" - (car bindings)) - expansion) - expansion))) - (fset 'macroexpand previous-macroexpand)))))) + (let ((previous-macroexpand (symbol-function 'macroexpand)) + (malformed-bindings nil)) + (dolist (binding bindings) + (unless (and (consp binding) (symbolp (car binding)) + (consp (cdr binding)) (null (cddr binding))) + (push binding malformed-bindings))) + (unwind-protect + (progn + (fset 'macroexpand #'cl--sm-macroexpand) + (let* ((venv (cdr (assq :cl-symbol-macros macroexpand-all-environment))) + (expansion + (macroexpand-all (macroexp-progn body) + (cons (cons :cl-symbol-macros + (append bindings venv)) + macroexpand-all-environment)))) + (if malformed-bindings + (macroexp--warn-and-return + (format-message "Malformed `cl-symbol-macrolet' binding(s): %S" + (nreverse malformed-bindings)) + expansion) + expansion))) + (fset 'macroexpand previous-macroexpand)))) ;;; Multiple values. -- 2.11.1 --=-=-= Content-Type: text/plain [1: 89898e43c7]: 2017-04-21 12:12:42 -0400 * lisp/emacs-lisp/cl-macs.el: Fix symbol-macrolet http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=89898e43c7ceef28bb3c2116b4d8a3ec96d9c8da --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 07 22:26:47 2017 Received: (at 26601) by debbugs.gnu.org; 8 Jun 2017 02:26:47 +0000 Received: from localhost ([127.0.0.1]:33907 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dIn9r-0003pR-1l for submit@debbugs.gnu.org; Wed, 07 Jun 2017 22:26:47 -0400 Received: from mail-io0-f196.google.com ([209.85.223.196]:35350) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dIn9o-0003p9-Gd; Wed, 07 Jun 2017 22:26:44 -0400 Received: by mail-io0-f196.google.com with SMTP id f79so2496448ioi.2; Wed, 07 Jun 2017 19:26:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=kcSURUKGivclMZ8wRU+B3MfpnIKi4r9LGZ1q8PC+hTg=; b=UqjnRFjWNGR8WC3TCQXe0/3M7cSWbXGWPcXkC1UmKM+PICpgCna8Y5Nd8q2iTd8Nyp LTfuo1mYKKX9gZFbC5KWimvDeYlLks4rGD1vCvk3jdTMO7sjR/0PV/P2iqRhaI5mFj9c 8ZdXVy5D7AV4AD3eT+F9/LcEnGaQm2P5VwT9OGQiLpXLZxWutMnZQ/voDmrdSo+f70/z tAqf5yD0tlIzC5lUkWaH/PpuBMSY33zV2rmzPYw3/PnnpKzzkbyhEjbqDb1inpP8txj1 dLDg4JRkbnWPnEk4Iu2ep3a1A/9WWD0anjwCLwvws5YhM8FdG/qD4CTodnJZKnEhOAtK 8Zng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=kcSURUKGivclMZ8wRU+B3MfpnIKi4r9LGZ1q8PC+hTg=; b=JC8rcmo7MbP3Lrac467YFxomSMFCk8Mpkpa+wMLIc3RpGkeo7zUK4wT0haCms8x0Al nTjmRQ4+jebXLxW3F0GKGd4I/r+CwK5yG86yKlIV4amCMBHk+BEvgb4VOUmc2r9UMjkl /guy7fzs0voemRYj733o6/PBJNJBntLceMxQLAn4bruUVLy+ycfvhO4TxCF5TMSJWjqp onGhq4EOHSCbc5fwGLJ4syOs4G1ewEZ1fDxEqvdjPCf6DmR1h4NGAdChNMfgYQG0VjIs +YLDDbUzYvHLs0jYtPL/XOwDQzqfCKD9JSCkCPvzUTzShQ7furNOwnVaAM6EJDTQgVIa p6xA== X-Gm-Message-State: AODbwcCnDweRM70QfRi0f2wi6fvPH26AJEhCJFJ23GgQlidMxuvyF+3p JoNVorAD4syIlg6A X-Received: by 10.107.170.99 with SMTP id t96mr28468688ioe.113.1496888798885; Wed, 07 Jun 2017 19:26:38 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id l19sm1627430ioe.3.2017.06.07.19.26.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 07 Jun 2017 19:26:38 -0700 (PDT) From: npostavs@users.sourceforge.net To: 26601@debbugs.gnu.org Subject: Re: bug#26601: 26.0.50; Improvements to cl-symbol-macrolet References: <874lxhqehw.fsf@users.sourceforge.net> Date: Wed, 07 Jun 2017 22:28:10 -0400 In-Reply-To: <874lxhqehw.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net's message of "Fri, 21 Apr 2017 23:59:23 -0400") Message-ID: <87y3t3w6v9.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 26601 Cc: Stefan Monnier X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) tags 26601 fixed close 26601 quit npostavs@users.sourceforge.net writes: > Subject: [PATCH v1] Split variable macro env from function env > > * lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand): Remove. > (cl-symbol-macrolet): Instead of adding each binding directly into the > main environment with a special key format, put all symbol macro > bindings into a single entry in the main environment under > `:cl-symbol-macros'. > (cl--sm-macroexpand): Look up symbol bindings in the > `:cl-symbol-macros' entry of the environment. Pushed to master [1: 0648edf3e0]. [1: 0648edf3e0]: 2017-06-07 20:03:31 -0400 Split variable macro env from function env http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=0648edf3e05e224ee8410ab244df7364f919dc58 From unknown Thu Aug 14 21:52:36 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Thu, 06 Jul 2017 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator