From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#21466: [PATCH] Avoid defining (temporarily) vars and functions Date: Thu, 29 Oct 2015 09:09:29 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1446124243 4299 80.91.229.3 (29 Oct 2015 13:10:43 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 29 Oct 2015 13:10:43 +0000 (UTC) To: 21466@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Oct 29 14:10:33 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ZrmyF-0001Go-Vl for geb-bug-gnu-emacs@m.gmane.org; Thu, 29 Oct 2015 14:10:24 +0100 Original-Received: from localhost ([::1]:43986 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZrmyF-0000CI-Bc for geb-bug-gnu-emacs@m.gmane.org; Thu, 29 Oct 2015 09:10:23 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35402) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zrmy4-00007B-By for bug-gnu-emacs@gnu.org; Thu, 29 Oct 2015 09:10:16 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zrmy0-0004RT-DM for bug-gnu-emacs@gnu.org; Thu, 29 Oct 2015 09:10:12 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:52702) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zrmxv-0004MA-Te; Thu, 29 Oct 2015 09:10:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Zrmxv-0006lg-0F; Thu, 29 Oct 2015 09:10:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org, bug-cc-mode@gnu.org Resent-Date: Thu, 29 Oct 2015 13:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21466 X-GNU-PR-Package: emacs,cc-mode X-GNU-PR-Keywords: patch X-Debbugs-Original-Cc: bug-cc-mode@gnu.org Original-Received: via spool by 21466-submit@debbugs.gnu.org id=B21466.144612419926002 (code B ref 21466); Thu, 29 Oct 2015 13:10:02 +0000 Original-Received: (at 21466) by debbugs.gnu.org; 29 Oct 2015 13:09:59 +0000 Original-Received: from localhost ([127.0.0.1]:43410 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zrmxm-0006lG-Vf for submit@debbugs.gnu.org; Thu, 29 Oct 2015 09:09:58 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.181]:12667) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZrmxO-0006kl-TM for 21466@debbugs.gnu.org; Thu, 29 Oct 2015 09:09:53 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0A8FgA731xV/+Z93mhcgxCBMoJQToUHu0CHSwQCAoE8OhMBAQEBAQEBgQpBBYNdAQEDASMzIwULCxoCGA4CAhQYDTeIJAirDKQXAQEBBwIBH4EhihmEUjMHgmiBRQWLRKlAI2GBKRyBbiIxgQMkgSABAQE X-IPAS-Result: A0A8FgA731xV/+Z93mhcgxCBMoJQToUHu0CHSwQCAoE8OhMBAQEBAQEBgQpBBYNdAQEDASMzIwULCxoCGA4CAhQYDTeIJAirDKQXAQEBBwIBH4EhihmEUjMHgmiBRQWLRKlAI2GBKRyBbiIxgQMkgSABAQE X-IronPort-AV: E=Sophos;i="5.13,465,1427774400"; d="scan'208";a="171944489" Original-Received: from 104-222-125-230.cpe.teksavvy.com (HELO fmsmemgm.homelinux.net) ([104.222.125.230]) by ironport2-out.teksavvy.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 29 Oct 2015 09:09:30 -0400 Original-Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id AA264AE25E; Thu, 29 Oct 2015 09:09:29 -0400 (EDT) In-Reply-To: (Stefan Monnier's message of "Fri, 11 Sep 2015 23:36:45 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:108144 Archived-At: Ping? Stefan >>>>> "Stefan" =3D=3D Stefan Monnier writes: > Package: Emacs > Version: 25.0.50 > CC-mode currently defines various non-CC-mode variables and functions > with dummy values, as a way to avoid byte-compiler warnings when using > those external vars/functions. > Since this is dangerous business, CC-mode has to be extra careful to > undo such settings when they're not needed any more. > It might have made sense back in the days when the byte-compiler did not > offer built-in ways to silence those warnings, but nowadays we can > do better. > Any objections to the patch below (which also removes the unused > cc-bytecomp-put, while we're at it)? > Stefan > 2015-09-12 Stefan Monnier > * lisp/progmodes/cc-bytecomp.el: Use newer compiler-silencers. > (cc-bytecomp-defvar): Use just (defvar ) when that is known to > silence the byte-compiler warnings. > (cc-bytecomp-defun): Use just (declare-function ) when that is > known to silence the byte-compiler warnings. > (cc-bytecomp-boundp, cc-bytecomp-fboundp): Change accordingly. > (cc-bytecomp-put): Remove, unused. > (cc-bytecomp-original-properties): Remove var. > (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment): > Don't use cc-bytecomp-original-properties any more. > diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el > index 81b7a82..fff2a9e 100644 > --- a/lisp/progmodes/cc-bytecomp.el > +++ b/lisp/progmodes/cc-bytecomp.el > @@ -75,12 +75,10 @@ =20 > (defvar cc-bytecomp-unbound-variables nil) > (defvar cc-bytecomp-original-functions nil) > -(defvar cc-bytecomp-original-properties nil) > (defvar cc-bytecomp-loaded-files nil) =20 > (setq cc-bytecomp-unbound-variables nil) > (setq cc-bytecomp-original-functions nil) > -(setq cc-bytecomp-original-properties nil) > (setq cc-bytecomp-loaded-files nil) =20 > (defvar cc-bytecomp-environment-set nil) > @@ -173,16 +171,6 @@ perhaps a `cc-bytecomp-restore-environment' is forgo= tten somewhere")) > (cc-bytecomp-debug-msg > "cc-bytecomp-setup-environment: Covered function %s" fun)))) > (setq p (cdr p))) > - (setq p cc-bytecomp-original-properties) > - (while p > - (let ((sym (car (car (car p)))) > - (prop (cdr (car (car p)))) > - (tempdef (car (cdr (car p))))) > - (put sym prop tempdef) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-setup-environment: Bound property %s for %s to %s" > - prop sym tempdef)) > - (setq p (cdr p))) > (setq cc-bytecomp-environment-set t) > (cc-bytecomp-debug-msg > "cc-bytecomp-setup-environment: Done")))) > @@ -232,22 +220,6 @@ perhaps a `cc-bytecomp-restore-environment' is forgo= tten somewhere")) > "cc-bytecomp-restore-environment: Not restoring function %s" > fun)))) > (setq p (cdr p))) > - (setq p cc-bytecomp-original-properties) > - (while p > - (let ((sym (car (car (car p)))) > - (prop (cdr (car (car p)))) > - (tempdef (car (cdr (car p)))) > - (origdef (cdr (cdr (car p))))) > - (if (eq (get sym prop) tempdef) > - (progn > - (put sym prop origdef) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-restore-environment: Restored property %s for %s to %s" > - prop sym origdef)) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-restore-environment: Not restoring property %s for = %s" > - prop sym))) > - (setq p (cdr p))) > (setq cc-bytecomp-environment-set nil) > (cc-bytecomp-debug-msg > "cc-bytecomp-restore-environment: Done")))) > @@ -348,25 +320,28 @@ afterwards. Don't use within `eval-when-compile'." > (eval-when-compile (cc-bytecomp-setup-environment)))) =20 > (defmacro cc-bytecomp-defvar (var) > - "Binds the symbol as a variable during compilation of the file, > + "Bind the symbol as a variable during compilation of the file, > to silence the byte compiler. Don't use within `eval-when-compile'." > - `(eval-when-compile > - (if (boundp ',var) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-defvar: %s bound already as variable" ',var) > - (if (not (memq ',var cc-bytecomp-unbound-variables)) > - (progn > - (cc-bytecomp-debug-msg > - "cc-bytecomp-defvar: Saving %s (as unbound)" ',var) > - (setq cc-bytecomp-unbound-variables > - (cons ',var cc-bytecomp-unbound-variables)))) > - (if (cc-bytecomp-is-compiling) > - (progn > - (defvar ,var) > - (set ',var (intern (concat "cc-bytecomp-ignore-var:" > - (symbol-name ',var)))) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-defvar: Covered variable %s" ',var)))))) > + (if (not (featurep 'xemacs)) > + `(defvar ,var) > + ;; Not sure if XEmacs's =E2=80=98defvar=E2=80=99 works in the same w= ay. > + `(eval-when-compile > + (if (boundp ',var) > + (cc-bytecomp-debug-msg > + "cc-bytecomp-defvar: %s bound already as variable" ',var) > + (if (not (memq ',var cc-bytecomp-unbound-variables)) > + (progn > + (cc-bytecomp-debug-msg > + "cc-bytecomp-defvar: Saving %s (as unbound)" ',var) > + (setq cc-bytecomp-unbound-variables > + (cons ',var cc-bytecomp-unbound-variables)))) > + (if (cc-bytecomp-is-compiling) > + (progn > + (defvar ,var) > + (set ',var (intern (concat "cc-bytecomp-ignore-var:" > + (symbol-name ',var)))) > + (cc-bytecomp-debug-msg > + "cc-bytecomp-defvar: Covered variable %s" ',var))))))) =20 > (defmacro cc-bytecomp-defun (fun) > "Bind the symbol as a function during compilation of the file, > @@ -377,48 +352,33 @@ definition. That means that this macro will not sh= ut up warnings > about incorrect number of arguments. It's dangerous to try to replace > existing functions since the byte compiler might need the definition > at compile time, e.g. for macros and inline functions." > - `(eval-when-compile > - (if (fboundp ',fun) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-defun: %s bound already as function" ',fun) > - (if (not (assq ',fun cc-bytecomp-original-functions)) > - (progn > - (cc-bytecomp-debug-msg > - "cc-bytecomp-defun: Saving %s (as unbound)" ',fun) > - (setq cc-bytecomp-original-functions > - (cons (list ',fun nil 'unbound) > - cc-bytecomp-original-functions)))) > - (if (cc-bytecomp-is-compiling) > - (progn > - (fset ',fun (intern (concat "cc-bytecomp-ignore-fun:" > - (symbol-name ',fun)))) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-defun: Covered function %s" ',fun)))))) > - > -(defmacro cc-bytecomp-put (symbol propname value) > - "Set a property on a symbol during compilation (and evaluation) of > -the file. Don't use outside `eval-when-compile'." > - `(eval-when-compile > - (if (not (assoc (cons ,symbol ,propname) cc-bytecomp-original-prope= rties)) > - (progn > + (if (fboundp 'declare-function) > + `(declare-function ,fun nil) > + `(eval-when-compile > + (if (fboundp ',fun) > (cc-bytecomp-debug-msg > - "cc-bytecomp-put: Saving property %s for %s with value %s" > - ,propname ,symbol (get ,symbol ,propname)) > - (setq cc-bytecomp-original-properties > - (cons (cons (cons ,symbol ,propname) > - (cons ,value (get ,symbol ,propname))) > - cc-bytecomp-original-properties)))) > - (put ,symbol ,propname ,value) > - (cc-bytecomp-debug-msg > - "cc-bytecomp-put: Bound property %s for %s to %s" > - ,propname ,symbol ,value))) > + "cc-bytecomp-defun: %s bound already as function" ',fun) > + (if (not (assq ',fun cc-bytecomp-original-functions)) > + (progn > + (cc-bytecomp-debug-msg > + "cc-bytecomp-defun: Saving %s (as unbound)" ',fun) > + (setq cc-bytecomp-original-functions > + (cons (list ',fun nil 'unbound) > + cc-bytecomp-original-functions)))) > + (if (cc-bytecomp-is-compiling) > + (progn > + (fset ',fun (intern (concat "cc-bytecomp-ignore-fun:" > + (symbol-name ',fun)))) > + (cc-bytecomp-debug-msg > + "cc-bytecomp-defun: Covered function %s" ',fun))))))) =20 > (defmacro cc-bytecomp-boundp (symbol) > "Return non-nil if the given symbol is bound as a variable outside > the compilation. This is the same as using `boundp' but additionally > exclude any variables that have been bound during compilation with > `cc-bytecomp-defvar'." > - (if (and (cc-bytecomp-is-compiling) > + (if (and (featurep 'xemacs) > + (cc-bytecomp-is-compiling) > (memq (car (cdr symbol)) cc-bytecomp-unbound-variables)) > nil > `(boundp ,symbol))) > @@ -429,7 +389,8 @@ the compilation. This is the same as using `fboundp'= but additionally > exclude any functions that have been bound during compilation with > `cc-bytecomp-defun'." > (let (fun-elem) > - (if (and (cc-bytecomp-is-compiling) > + (if (and (not (fboundp 'declare-function)) > + (cc-bytecomp-is-compiling) > (setq fun-elem (assq (car (cdr symbol)) > cc-bytecomp-original-functions)) > (eq (elt fun-elem 2) 'unbound))