From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 11 08:07:35 2022 Received: (at submit) by debbugs.gnu.org; 11 Jun 2022 12:07:35 +0000 Received: from localhost ([127.0.0.1]:52043 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nzztv-0005z4-0X for submit@debbugs.gnu.org; Sat, 11 Jun 2022 08:07:35 -0400 Received: from lists.gnu.org ([209.51.188.17]:49696) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nzztq-0005yt-W4 for submit@debbugs.gnu.org; Sat, 11 Jun 2022 08:07:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55882) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzztq-0007IU-RQ for bug-gnu-emacs@gnu.org; Sat, 11 Jun 2022 08:07:30 -0400 Received: from mail175c50.megamailservers.eu ([91.136.10.185]:55260 helo=mail50c50.megamailservers.eu) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzzto-0004BO-E3 for bug-gnu-emacs@gnu.org; Sat, 11 Jun 2022 08:07:30 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1654949226; bh=f+Jaz6QgtshZ9cMPbP+AF3+iiOYVLcQwPDmO0mjZdM0=; h=From:Subject:Date:To:From; b=rW+3frgKrY+C7WxEPiOk4KH+1z6CLC6HML+cKvhCm+NHJ/5iTsSWnBl8jDiOAODkb wFzYE39MsEktiuaGtayb9wysfFnaZodlO4zKv3Csbo496PPd3Y4FZ0CEswgn4ZIFxw HF0PAWLs1rB9ySkaYKGsRK1rJ8w8vMXixy6a8T+0= Feedback-ID: mattiase@acm.or Received: from smtpclient.apple (c188-150-171-71.bredband.tele2.se [188.150.171.71]) (authenticated bits=0) by mail50c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 25BC74rV017094 for ; Sat, 11 Jun 2022 12:07:05 +0000 From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= Content-Type: multipart/mixed; boundary="Apple-Mail=_FCB02B89-EC3B-403F-99E8-F6FB490350E1" Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.13\)) Subject: warn about misplaced or duplicated doc strings, `declare` or `interactive` forms Message-Id: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> Date: Sat, 11 Jun 2022 14:07:03 +0200 To: bug-gnu-emacs@gnu.org X-Mailer: Apple Mail (2.3654.120.0.1.13) X-CTCH-RefID: str=0001.0A782F25.62A4856A.0020, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-Origin-Country: SE Received-SPF: softfail client-ip=91.136.10.185; envelope-from=mattiase@acm.org; helo=mail50c50.megamailservers.eu X-Spam_score_int: -11 X-Spam_score: -1.2 X-Spam_bar: - X-Spam_report: (-1.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_SOFTFAIL=0.665, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) 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: -2.3 (--) --Apple-Mail=_FCB02B89-EC3B-403F-99E8-F6FB490350E1 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii In function definitions, doc strings, `declare` and `interactive` forms = are each optional but must appear in that order and duplications are not = permitted. Many violations against these rules go undetected. The attached patch adds checks to `defun` and `defmacro`. Violations = result in compilation warnings but it could be changed into hard errors = if desired. It also accepts `(:documentation EXPR)` as alternative to a = doc string literal, which currently doesn't work i all cases. Applying it reveals a handful of mistakes in the Emacs source tree, and = in some external packages. --Apple-Mail=_FCB02B89-EC3B-403F-99E8-F6FB490350E1 Content-Disposition: attachment; filename=0001-function-and-macro-attribute-order-warning-patch.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-function-and-macro-attribute-order-warning-patch.patch" Content-Transfer-Encoding: quoted-printable =46rom=208f7da7e642be6fb4bf09ba71a986319aa4d47988=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Fri,=2010=20Jun=202022=2010:16:57=20+0200=0A= Subject:=20[PATCH]=20function=20and=20macro=20attribute=20order=20= warning=20patch=0A=0A---=0A=20lisp/emacs-lisp/byte-run.el=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20|=20244=20++++++++++------=0A=20= .../bytecomp-resources/fun-attr-warn.el=20=20=20=20=20=20=20|=20266=20= ++++++++++++++++++=0A=20test/lisp/emacs-lisp/bytecomp-tests.el=20=20=20=20= =20=20=20=20|=20=2063=20+++++=0A=203=20files=20changed,=20482=20= insertions(+),=2091=20deletions(-)=0A=20create=20mode=20100644=20= test/lisp/emacs-lisp/bytecomp-resources/fun-attr-warn.el=0A=0Adiff=20= --git=20a/lisp/emacs-lisp/byte-run.el=20b/lisp/emacs-lisp/byte-run.el=0A= index=2092c2699c6e..8e5e0e0f5a=20100644=0A---=20= a/lisp/emacs-lisp/byte-run.el=0A+++=20b/lisp/emacs-lisp/byte-run.el=0A@@=20= -289,7=20+289,7=20@@=20macro-declarations-alist=0A=20(defalias=20= 'defmacro=0A=20=20=20(cons=0A=20=20=20=20'macro=0A-=20=20=20#'(lambda=20= (name=20arglist=20&optional=20docstring=20&rest=20body)=0A+=20=20=20= #'(lambda=20(name=20arglist=20&rest=20body)=0A=20=20=20=20=20=20=20=20= "Define=20NAME=20as=20a=20macro.=0A=20When=20the=20macro=20is=20called,=20= as=20in=20(NAME=20ARGS...),=0A=20the=20function=20(lambda=20ARGLIST=20= BODY...)=20is=20applied=20to=0A@@=20-301,115=20+301,177=20@@=20'defmacro=0A= =20The=20return=20value=20is=20undefined.=0A=20=0A=20\(fn=20NAME=20= ARGLIST=20&optional=20DOCSTRING=20DECL=20&rest=20BODY)"=0A-=20=20=20=20=20= =20=20;;=20We=20can't=20just=20have=20`decl'=20as=20an=20&optional=20= argument,=20because=20we=20need=0A-=20=20=20=20=20=20=20;;=20to=20= distinguish=0A-=20=20=20=20=20=20=20;;=20=20=20=20(defmacro=20foo=20= (arg)=20(bar)=20nil)=0A-=20=20=20=20=20=20=20;;=20from=0A-=20=20=20=20=20= =20=20;;=20=20=20=20(defmacro=20foo=20(arg)=20(bar)).=0A-=20=20=20=20=20=20= =20(let=20((decls=20(cond=0A-=09=09=20=20=20=20=20((eq=20(car-safe=20= docstring)=20'declare)=0A-=09=09=20=20=20=20=20=20(prog1=20(cdr=20= docstring)=20(setq=20docstring=20nil)))=0A-=09=09=20=20=20=20=20((and=20= (stringp=20docstring)=0A-=09=09=09=20=20=20(eq=20(car-safe=20(car=20= body))=20'declare))=0A-=09=09=20=20=20=20=20=20(prog1=20(cdr=20(car=20= body))=20(setq=20body=20(cdr=20body)))))))=0A-=09=20(if=20docstring=20= (setq=20body=20(cons=20docstring=20body))=0A-=09=20=20=20(if=20(null=20= body)=20(setq=20body=20'(nil))))=0A-=09=20;;=20Can't=20use=20backquote=20= because=20it's=20not=20defined=20yet!=0A-=09=20(let*=20((fun=20(list=20= 'function=20(cons=20'lambda=20(cons=20arglist=20body))))=0A-=09=09(def=20= (list=20'defalias=0A-=09=09=09=20=20=20(list=20'quote=20name)=0A-=09=09=09= =20=20=20(list=20'cons=20''macro=20fun)))=0A-=09=09(declarations=0A-=09=09= =20(mapcar=0A-=09=09=20=20#'(lambda=20(x)=0A-=09=09=20=20=20=20=20=20= (let=20((f=20(cdr=20(assq=20(car=20x)=20macro-declarations-alist))))=0A-=09= =09=09(if=20f=20(apply=20(car=20f)=20name=20arglist=20(cdr=20x))=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (macroexp-warn-and-return=0A-=09=09=09=20=20=20(format-message=0A-=09=09=09= =20=20=20=20"Unknown=20macro=20property=20%S=20in=20%S"=0A-=09=09=09=20=20= =20=20(car=20x)=20name)=0A-=09=09=09=20=20=20nil=20nil=20nil=20(car=20= x)))))=0A-=09=09=20=20decls)))=0A-=09=20=20=20;;=20Refresh=20font-lock=20= if=20this=20is=20a=20new=20macro,=20or=20it=20is=20an=0A-=09=20=20=20;;=20= existing=20macro=20whose=20'no-font-lock-keyword=20declaration=0A-=09=20=20= =20;;=20has=20changed.=0A-=09=20=20=20(if=20(and=0A-=09=09;;=20If=20= lisp-mode=20hasn't=20been=20loaded,=20there's=20no=20reason=0A-=09=09;;=20= to=20flush.=0A-=09=09(fboundp=20'lisp--el-font-lock-flush-elisp-buffers)=0A= -=09=09(or=20(not=20(fboundp=20name))=20;;=20new=20macro=0A-=09=09=20=20=20= =20(and=20(fboundp=20name)=20=20;;=20existing=20macro=0A-=09=09=09=20= (member=20`(function-put=20',name=20'no-font-lock-keyword=0A-=09=09=09=09= =09=09',(get=20name=20'no-font-lock-keyword))=0A-=09=09=09=09=20= declarations))))=0A+=20=20=20=20=20=20=20(let=20((docstring=20nil)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20(declare-form=20nil)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20(warnings=20nil))=0A+=20=20=20=20=20=20=20=20=20= (while=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(and=20body=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let*=20((form=20(car=20= body))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(head=20(car-safe=20form)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20((or=20(and=20(stringp=20form)=20(cdr=20= body))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(eq=20head=20:documentation))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(cond=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(docstring=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(push=20= (macroexp-warn-and-return=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"More=20than=20one=20doc=20= string"=20nil=20nil=20t=20form)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20warnings))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (declare-form=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(push=20(macroexp-warn-and-return=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "Doc=20string=20after=20`declare'"=20nil=20nil=20t=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= declare-form)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20warnings))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=20(setq=20docstring=20= form)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((eq=20head=20'declare)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(declare-form=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(push=20(macroexp-warn-and-return=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20"More=20than=20one=20`declare'=20form"=20nil=20nil=20= t=20form)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20warnings))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(t=20(setq=20declare-form=20= form)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20t))))=0A+=20=20=20=20=20=20=20=20=20=20=20(setq=20body=20(cdr=20= body)))=0A+=20=20=20=20=20=20=20=20=20(if=20docstring=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20(setq=20body=20(cons=20docstring=20body))=0A+=20=20=20= =20=20=20=20=20=20=20=20(if=20(null=20body)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(setq=20body=20'(nil))))=0A+=20=20=20=20=20=20=20=20=20= (let*=20((declarations=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(nconc=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= warnings=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (mapcar=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= #'(lambda=20(x)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(let=20((f=20(cdr=20(assq=20(car=20x)=20= macro-declarations-alist))))=0A+=09=09=20=20=20=20=20=20=20=20=20(if=20f=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(apply=20(car=20f)=20name=20arglist=20(cdr=20x))=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (macroexp-warn-and-return=0A+=09=09=20=20=20=20=20=20=20=20=20=20=20=20= (format-message=0A+=09=09=20=20=20=20=20=20=20=20=20=20=20=20=20"Unknown=20= macro=20property=20%S=20in=20%S"=0A+=09=09=20=20=20=20=20=20=20=20=20=20=20= =20=20(car=20x)=20name)=0A+=09=09=20=20=20=20=20=20=20=20=20=20=20=20nil=20= nil=20nil=20(car=20x)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(cdr=20declare-form))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20;;=20Can't=20use=20backquote=20because=20it's=20not=20= defined=20yet!=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fun=20= (list=20'function=20(cons=20'lambda=20(cons=20arglist=20body))))=0A+=09=20= =20=20=20=20=20=20=20(def=20(list=20'defalias=0A+=09=09=20=20=20=20=20=20= =20=20=20=20=20(list=20'quote=20name)=0A+=09=09=20=20=20=20=20=20=20=20=20= =20=20(list=20'cons=20''macro=20fun))))=0A+=20=20=20=20=20=20=20=20=20=20= =20;;=20Refresh=20font-lock=20if=20this=20is=20a=20new=20macro,=20or=20= it=20is=20an=0A+=20=20=20=20=20=20=20=20=20=20=20;;=20existing=20macro=20= whose=20'no-font-lock-keyword=20declaration=0A+=20=20=20=20=20=20=20=20=20= =20=20;;=20has=20changed.=0A+=20=20=20=20=20=20=20=20=20=20=20(if=20(and=0A= +=09=20=20=20=20=20=20=20=20;;=20If=20lisp-mode=20hasn't=20been=20= loaded,=20there's=20no=20reason=0A+=09=20=20=20=20=20=20=20=20;;=20to=20= flush.=0A+=09=20=20=20=20=20=20=20=20(fboundp=20= 'lisp--el-font-lock-flush-elisp-buffers)=0A+=09=20=20=20=20=20=20=20=20= (or=20(not=20(fboundp=20name))=20;;=20new=20macro=0A+=09=20=20=20=20=20=20= =20=20=20=20=20=20(and=20(fboundp=20name)=20=20;;=20existing=20macro=0A+=09= =09=20=20=20=20=20=20=20=20=20(member=20`(function-put=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20',name=20'no-font-lock-keyword=0A+=09=09=09=09=20=20=20= ',(get=20name=20'no-font-lock-keyword))=0A+=09=09=09=20=20=20=20=20=20=20= =20=20declarations))))=0A=20=09=20=20=20=20=20=20=20= (lisp--el-font-lock-flush-elisp-buffers))=0A-=09=20=20=20(if=20= declarations=0A+=20=20=20=20=20=20=20=20=20=20=20(if=20declarations=0A=20= =09=20=20=20=20=20=20=20(cons=20'prog1=20(cons=20def=20declarations))=0A=20= =09=20=20=20=20=20def))))))=0A=20=0A=20;;=20Now=20that=20we=20defined=20= defmacro=20we=20can=20use=20it!=0A-(defmacro=20defun=20(name=20arglist=20= &optional=20docstring=20&rest=20body)=0A+(defmacro=20defun=20(name=20= arglist=20&rest=20body)=0A=20=20=20"Define=20NAME=20as=20a=20function.=0A= =20The=20definition=20is=20(lambda=20ARGLIST=20[DOCSTRING]=20BODY...).=0A= -See=20also=20the=20function=20`interactive'.=0A=20DECL=20is=20a=20= declaration,=20optional,=20of=20the=20form=20(declare=20DECLS...)=20= where=0A=20DECLS=20is=20a=20list=20of=20elements=20of=20the=20form=20= (PROP=20.=20VALUES).=20=20These=20are=0A=20interpreted=20according=20to=20= `defun-declarations-alist'.=0A+INTERACTIVE=20is=20an=20optional=20= `interactive'=20specification.=0A=20The=20return=20value=20is=20= undefined.=0A=20=0A-\(fn=20NAME=20ARGLIST=20&optional=20DOCSTRING=20DECL=20= &rest=20BODY)"=0A-=20=20;;=20We=20can't=20just=20have=20`decl'=20as=20an=20= &optional=20argument,=20because=20we=20need=0A-=20=20;;=20to=20= distinguish=0A-=20=20;;=20=20=20=20(defun=20foo=20(arg)=20(toto)=20nil)=0A= -=20=20;;=20from=0A-=20=20;;=20=20=20=20(defun=20foo=20(arg)=20(toto)).=0A= +\(fn=20NAME=20ARGLIST=20&optional=20DOCSTRING=20DECL=20INTERACTIVE=20= &rest=20BODY)"=0A=20=20=20(declare=20(doc-string=203)=20(indent=202))=0A=20= =20=20(or=20name=20(error=20"Cannot=20define=20'%s'=20as=20a=20function"=20= name))=0A=20=20=20(if=20(null=0A=20=20=20=20=20=20=20=20(and=20(listp=20= arglist)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20(null=20(delq=20t=20= (mapcar=20#'symbolp=20arglist)))))=0A=20=20=20=20=20=20=20(error=20= "Malformed=20arglist:=20%s"=20arglist))=0A-=20=20(let=20((decls=20(cond=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((eq=20(car-safe=20= docstring)=20'declare)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(prog1=20(cdr=20docstring)=20(setq=20docstring=20nil)))=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20((and=20(stringp=20docstring)=0A-=09=09= =20=20=20=20=20=20(eq=20(car-safe=20(car=20body))=20'declare))=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(prog1=20(cdr=20(car=20body))=20= (setq=20body=20(cdr=20body)))))))=0A-=20=20=20=20(if=20docstring=20(setq=20= body=20(cons=20docstring=20body))=0A-=20=20=20=20=20=20(if=20(null=20= body)=20(setq=20body=20'(nil))))=0A+=20=20(let=20((docstring=20nil)=0A+=20= =20=20=20=20=20=20=20(declare-form=20nil)=0A+=20=20=20=20=20=20=20=20= (interactive-form=20nil)=0A+=20=20=20=20=20=20=20=20(warnings=20nil))=0A= +=20=20=20=20(while=0A+=20=20=20=20=20=20=20=20(and=20body=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20(let*=20((form=20(car=20body))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(head=20(car-safe=20= form)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cond=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20((or=20(and=20(stringp=20form)=20= (cdr=20body))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(eq=20head=20:documentation))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(docstring=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (push=20(macroexp-warn-and-return=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"More=20than=20one=20doc=20= string"=20nil=20nil=20t=20form)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20warnings))=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(declare-form=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(push=20(macroexp-warn-and-return=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "Doc=20string=20after=20`declare'"=20nil=20nil=20t=20declare-form)=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= warnings))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (interactive-form=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(push=20(macroexp-warn-and-return=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"Doc=20string=20after=20= `interactive'"=20nil=20nil=20t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20interactive-form)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20warnings))=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=20(setq=20= docstring=20form)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((eq=20head=20= 'declare)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cond=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare-form=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(push=20= (macroexp-warn-and-return=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"More=20than=20one=20`declare'=20form"=20= nil=20nil=20t=20form)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20warnings))=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(interactive-form=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(push=20(macroexp-warn-and-return=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "`declare'=20after=20`interactive'"=20nil=20nil=20t=20form)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= warnings))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=20= (setq=20declare-form=20form)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((eq=20= head=20'interactive)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cond=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (interactive-form=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(push=20(macroexp-warn-and-return=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"More=20than=20one=20= `interactive'=20form"=20nil=20nil=20t=20form)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20warnings))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=20(setq=20= interactive-form=20form)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20t))))=0A+=20=20=20=20=20=20(setq=20body=20(cdr=20body)))=0A=20=20=20= =20=20(let=20((declarations=0A-=20=20=20=20=20=20=20=20=20=20=20(mapcar=0A= -=20=20=20=20=20=20=20=20=20=20=20=20#'(lambda=20(x)=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(let=20((f=20(cdr=20(assq=20(car=20x)=20= defun-declarations-alist))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(cond=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(f=20(apply=20(car=20f)=20name=20arglist=20(cdr=20x)))=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Yuck!!=0A-=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20((and=20(featurep=20'cl)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (memq=20(car=20x)=20=20;C.f.=20cl-do-proclaim.=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= '(special=20inline=20notinline=20optimize=20warn)))=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(push=20(list=20'declare=20x)=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(if=20(stringp=20docstring)=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(eq=20= (car-safe=20(cadr=20body))=20'interactive)=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cddr=20body)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(cdr=20body))=0A-=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= (eq=20(car-safe=20(car=20body))=20'interactive)=0A-=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cdr=20body)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20body)))=0A-=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20nil)=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(t=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(macroexp-warn-and-return=0A-=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20(format-message=20"Unknown=20defun=20= property=20`%S'=20in=20%S"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(car=20= x)=20name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20nil=20nil=20nil=20(car=20x))))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20= decls))=0A-=20=20=20=20=20=20=20=20=20=20(def=20(list=20'defalias=0A-=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20'quote=20= name)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (list=20'function=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(cons=20'lambda=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (cons=20arglist=20body))))))=0A-=20=20=20=20=20=20(if=20declarations=0A-=20= =20=20=20=20=20=20=20=20=20(cons=20'prog1=20(cons=20def=20declarations))=0A= -=20=20=20=20=20=20=20=20=20=20def))))=0A+=20=20=20=20=20=20=20=20=20=20=20= (nconc=0A+=20=20=20=20=20=20=20=20=20=20=20=20warnings=0A+=20=20=20=20=20= =20=20=20=20=20=20=20(mapcar=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= #'(lambda=20(x)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (let=20((f=20(cdr=20(assq=20(car=20x)=20defun-declarations-alist))))=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cond=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(f=20(apply=20(car=20f)=20= name=20arglist=20(cdr=20x)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20;;=20Yuck!!=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20((and=20(featurep=20'cl)=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(memq=20(car=20x)=20=20= ;C.f.=20cl-do-proclaim.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(special=20inline=20= notinline=20optimize=20warn)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20(push=20(list=20'declare=20x)=20body)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil)=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(macroexp-warn-and-return=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (format-message=20"Unknown=20defun=20property=20`%S'=20in=20%S"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20(car=20x)=20name)=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20nil=20nil=20(car=20= x))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(cdr=20= declare-form)))))=0A+=20=20=20=20=20=20(if=20interactive-form=0A+=20=20=20= =20=20=20=20=20=20=20(setq=20body=20(cons=20interactive-form=20body)))=0A= +=20=20=20=20=20=20(if=20docstring=0A+=20=20=20=20=20=20=20=20=20=20= (setq=20body=20(cons=20docstring=20body)))=0A+=20=20=20=20=20=20(if=20= (null=20body)=0A+=20=20=20=20=20=20=20=20=20=20(setq=20body=20'(nil)))=0A= +=20=20=20=20=20=20(let=20((def=20(list=20'defalias=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20'quote=20= name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(list=20'function=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20(cons=20'lambda=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(cons=20arglist=20body))))))=0A+=20=20=20=20=20=20=20=20(if=20= declarations=0A+=20=20=20=20=20=20=20=20=20=20=20=20(cons=20'prog1=20= (cons=20def=20declarations))=0A+=20=20=20=20=20=20=20=20=20=20def)))))=0A= =20=0A=20=0C=0A=20;;=20Redefined=20in=20byte-opt.el.=0Adiff=20--git=20= a/test/lisp/emacs-lisp/bytecomp-resources/fun-attr-warn.el=20= b/test/lisp/emacs-lisp/bytecomp-resources/fun-attr-warn.el=0Anew=20file=20= mode=20100644=0Aindex=200000000000..be907b32f4=0A---=20/dev/null=0A+++=20= b/test/lisp/emacs-lisp/bytecomp-resources/fun-attr-warn.el=0A@@=20-0,0=20= +1,266=20@@=0A+;;;=20-*-=20lexical-binding:=20t=20-*-=0A+=0A+;;=20= Correct=0A+=0A+(defun=20faw-str-decl-code=20(x)=0A+=20=20"something"=0A+=20= =20(declare=20(pure=20t))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-doc-decl-code=20(x)=0A+=20=20(:documentation=20"something")=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-str-int-code=20(x)=0A+=20=20"something"=0A+=20=20(interactive=20"P")=0A= +=20=20(print=20x))=0A+=0A+(defun=20faw-doc-int-code=20(x)=0A+=20=20= (:documentation=20"something")=0A+=20=20(interactive=20"P")=0A+=20=20= (print=20x))=0A+=0A+(defun=20faw-decl-int-code=20(x)=0A+=20=20(declare=20= (pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20(print=20x))=0A+=0A= +(defun=20faw-str-decl-int-code=20(x)=0A+=20=20"something"=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20(print=20= x))=0A+=0A+(defun=20faw-doc-decl-int-code=20(x)=0A+=20=20(:documentation=20= "something")=0A+=20=20(declare=20(pure=20t))=0A+=20=20(interactive=20= "P")=0A+=20=20(print=20x))=0A+=0A+=0A+;;=20Correct=20(last=20string=20is=20= return=20value)=0A+=0A+(defun=20faw-str=20()=0A+=20=20"something")=0A+=0A= +(defun=20faw-decl-str=20()=0A+=20=20(declare=20(pure=20t))=0A+=20=20= "something")=0A+=0A+(defun=20faw-decl-int-str=20()=0A+=20=20(declare=20= (pure=20t))=0A+=20=20(interactive)=0A+=20=20"something")=0A+=0A+(defun=20= faw-str-str=20()=0A+=20=20"something"=0A+=20=20"something=20else")=0A+=0A= +(defun=20faw-doc-str=20()=0A+=20=20(:documentation=20"something")=0A+=20= =20"something=20else")=0A+=0A+=0A+;;=20Incorrect=20(bad=20order)=0A+=0A= +(defun=20faw-int-decl-code=20(x)=0A+=20=20(interactive=20"P")=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-int-str-code=20(x)=0A+=20=20(interactive=20"P")=0A+=20=20"something"=0A= +=20=20(print=20x))=0A+=0A+(defun=20faw-int-doc-code=20(x)=0A+=20=20= (interactive=20"P")=0A+=20=20(:documentation=20"something")=0A+=20=20= (print=20x))=0A+=0A+(defun=20faw-decl-str-code=20(x)=0A+=20=20(declare=20= (pure=20t))=0A+=20=20"something"=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-decl-doc-code=20(x)=0A+=20=20(declare=20(pure=20t))=0A+=20=20= (:documentation=20"something")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-str-int-decl-code=20(x)=0A+=20=20"something"=0A+=20=20(interactive=20= "P")=0A+=20=20(declare=20(pure=20t))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-doc-int-decl-code=20(x)=0A+=20=20(:documentation=20"something")=0A+=20= =20(interactive=20"P")=0A+=20=20(declare=20(pure=20t))=0A+=20=20(print=20= x))=0A+=0A+(defun=20faw-int-str-decl-code=20(x)=0A+=20=20(interactive=20= "P")=0A+=20=20"something"=0A+=20=20(declare=20(pure=20t))=0A+=20=20= (print=20x))=0A+=0A+(defun=20faw-int-doc-decl-code=20(x)=0A+=20=20= (interactive=20"P")=0A+=20=20(:documentation=20"something")=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-int-decl-str-code=20(x)=0A+=20=20(interactive=20"P")=0A+=20=20= (declare=20(pure=20t))=0A+=20=20"something"=0A+=20=20(print=20x))=0A+=0A= +(defun=20faw-int-decl-doc-code=20(x)=0A+=20=20(interactive=20"P")=0A+=20= =20(declare=20(pure=20t))=0A+=20=20(:documentation=20"something")=0A+=20=20= (print=20x))=0A+=0A+(defun=20faw-decl-int-str-code=20(x)=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20"something"=0A= +=20=20(print=20x))=0A+=0A+(defun=20faw-decl-int-doc-code=20(x)=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20= (:documentation=20"something")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-decl-str-int-code=20(x)=0A+=20=20(declare=20(pure=20t))=0A+=20=20= "something"=0A+=20=20(interactive=20"P")=0A+=20=20(print=20x))=0A+=0A= +(defun=20faw-decl-doc-int-code=20(x)=0A+=20=20(declare=20(pure=20t))=0A= +=20=20(:documentation=20"something")=0A+=20=20(interactive=20"P")=0A+=20= =20(print=20x))=0A+=0A+=0A+;;=20Incorrect=20(duplication)=0A+=0A+(defun=20= faw-str-str-decl-int-code=20(x)=0A+=20=20"something"=0A+=20=20"something=20= else"=0A+=20=20(declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20= =20(print=20x))=0A+=0A+(defun=20faw-str-doc-decl-int-code=20(x)=0A+=20=20= "something"=0A+=20=20(:documentation=20"something=20else")=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20(print=20= x))=0A+=0A+(defun=20faw-doc-str-decl-int-code=20(x)=0A+=20=20= (:documentation=20"something")=0A+=20=20"something=20else"=0A+=20=20= (declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20(print=20= x))=0A+=0A+(defun=20faw-doc-doc-decl-int-code=20(x)=0A+=20=20= (:documentation=20"something")=0A+=20=20(:documentation=20"something=20= else")=0A+=20=20(declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20= =20(print=20x))=0A+=0A+(defun=20faw-str-decl-str-int-code=20(x)=0A+=20=20= "something"=0A+=20=20(declare=20(pure=20t))=0A+=20=20"something=20else"=0A= +=20=20(interactive=20"P")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-doc-decl-str-int-code=20(x)=0A+=20=20(:documentation=20"something")=0A= +=20=20(declare=20(pure=20t))=0A+=20=20"something=20else"=0A+=20=20= (interactive=20"P")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-str-decl-doc-int-code=20(x)=0A+=20=20"something"=0A+=20=20(declare=20= (pure=20t))=0A+=20=20(:documentation=20"something=20else")=0A+=20=20= (interactive=20"P")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-doc-decl-doc-int-code=20(x)=0A+=20=20(:documentation=20"something")=0A= +=20=20(declare=20(pure=20t))=0A+=20=20(:documentation=20"something=20= else")=0A+=20=20(interactive=20"P")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-str-decl-decl-int-code=20(x)=0A+=20=20"something"=0A+=20=20(declare=20= (pure=20t))=0A+=20=20(declare=20(indent=201))=0A+=20=20(interactive=20= "P")=0A+=20=20(print=20x))=0A+=0A+(defun=20faw-doc-decl-decl-int-code=20= (x)=0A+=20=20(:documentation=20"something")=0A+=20=20(declare=20(pure=20= t))=0A+=20=20(declare=20(indent=201))=0A+=20=20(interactive=20"P")=0A+=20= =20(print=20x))=0A+=0A+(defun=20faw-str-decl-int-decl-code=20(x)=0A+=20=20= "something"=0A+=20=20(declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A= +=20=20(declare=20(indent=201))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-doc-decl-int-decl-code=20(x)=0A+=20=20(:documentation=20"something")=0A= +=20=20(declare=20(pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20= (declare=20(indent=201))=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-str-decl-int-int-code=20(x)=0A+=20=20"something"=0A+=20=20(declare=20= (pure=20t))=0A+=20=20(interactive=20"P")=0A+=20=20(interactive=20"p")=0A= +=20=20(print=20x))=0A+=0A+(defun=20faw-doc-decl-int-int-code=20(x)=0A+=20= =20(:documentation=20"something")=0A+=20=20(declare=20(pure=20t))=0A+=20=20= (interactive=20"P")=0A+=20=20(interactive=20"p")=0A+=20=20(print=20x))=0A= +=0A+(defun=20faw-str-int-decl-int-code=20(x)=0A+=20=20"something"=0A+=20= =20(interactive=20"P")=0A+=20=20(declare=20(pure=20t))=0A+=20=20= (interactive=20"p")=0A+=20=20(print=20x))=0A+=0A+(defun=20= faw-doc-int-decl-int-code=20(x)=0A+=20=20(:documentation=20"something")=0A= +=20=20(interactive=20"P")=0A+=20=20(declare=20(pure=20t))=0A+=20=20= (interactive=20"p")=0A+=20=20(print=20x))=0Adiff=20--git=20= a/test/lisp/emacs-lisp/bytecomp-tests.el=20= b/test/lisp/emacs-lisp/bytecomp-tests.el=0Aindex=20= 27098d0bb1..0e46bce5f2=20100644=0A---=20= a/test/lisp/emacs-lisp/bytecomp-tests.el=0A+++=20= b/test/lisp/emacs-lisp/bytecomp-tests.el=0A@@=20-1574,6=20+1574,69=20@@=20= bytecomp-function-attributes=0A=20=20=20=20=20=20=20(should=20(equal=20= (get=20fname=20'lisp-indent-function)=201))=0A=20=20=20=20=20=20=20= (should=20(equal=20(aref=20bc=204)=20"tata\n\n(fn=20X)")))))=0A=20=0A= +(ert-deftest=20bytecomp-fun-attr-warn=20()=0A+=20=20;;=20Check=20that=20= warnings=20are=20emitted=20when=20doc=20strings,=20`declare'=20and=0A+=20= =20;;=20`interactive'=20forms=20don't=20come=20in=20the=20proper=20= order,=20or=20more=20than=20once.=0A+=20=20(let*=20((filename=20= "fun-attr-warn.el")=0A+=20=20=20=20=20=20=20=20=20(el=20= (ert-resource-file=20filename))=0A+=20=20=20=20=20=20=20=20=20(elc=20= (concat=20el=20"c"))=0A+=20=20=20=20=20=20=20=20=20(text-quoting-style=20= 'grave))=0A+=20=20=20=20(with-current-buffer=20(get-buffer-create=20= "*Compile-Log*")=0A+=20=20=20=20=20=20(let=20((inhibit-read-only=20t))=0A= +=20=20=20=20=20=20=20=20(erase-buffer))=0A+=20=20=20=20=20=20= (byte-compile-file=20el)=0A+=20=20=20=20=20=20(let=20((expected=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20'("70:4:=20Warning:=20`declare'=20after=20= `interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"74:4:=20= Warning:=20Doc=20string=20after=20`interactive'"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"79:4:=20Warning:=20Doc=20string=20after=20= `interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"84:4:=20= Warning:=20Doc=20string=20after=20`declare'"=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20"89:4:=20Warning:=20Doc=20string=20after=20`declare'"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"96:4:=20Warning:=20= `declare'=20after=20`interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20"102:4:=20Warning:=20`declare'=20after=20`interactive'"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20"108:4:=20Warning:=20`declare'=20= after=20`interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "106:4:=20Warning:=20Doc=20string=20after=20`interactive'"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"114:4:=20Warning:=20`declare'=20after=20= `interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"112:4:=20= Warning:=20Doc=20string=20after=20`interactive'"=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20"118:4:=20Warning:=20Doc=20string=20after=20= `interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"119:4:=20= Warning:=20`declare'=20after=20`interactive'"=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20"124:4:=20Warning:=20Doc=20string=20after=20= `interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"125:4:=20= Warning:=20`declare'=20after=20`interactive'"=0A+=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20"130:4:=20Warning:=20Doc=20string=20after=20= `declare'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"136:4:=20= Warning:=20Doc=20string=20after=20`declare'"=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20"142:4:=20Warning:=20Doc=20string=20after=20`declare'"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"148:4:=20Warning:=20Doc=20= string=20after=20`declare'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20"156:2:=20Warning:=20More=20than=20one=20doc=20string"=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20"165:4:=20Warning:=20More=20than=20one=20= doc=20string"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"170:2:=20= Warning:=20More=20than=20one=20doc=20string"=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20"179:4:=20Warning:=20More=20than=20one=20doc=20string"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"184:2:=20Warning:=20More=20= than=20one=20doc=20string"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "191:2:=20Warning:=20More=20than=20one=20doc=20string"=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20"201:4:=20Warning:=20More=20than=20one=20= doc=20string"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"208:4:=20= Warning:=20More=20than=20one=20doc=20string"=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20"215:4:=20Warning:=20More=20than=20one=20`declare'=20= form"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"222:4:=20Warning:=20= More=20than=20one=20`declare'=20form"=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20"230:4:=20Warning:=20More=20than=20one=20`declare'=20form"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"237:4:=20Warning:=20More=20= than=20one=20`declare'=20form"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20"244:4:=20Warning:=20More=20than=20one=20`interactive'=20form"=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20"251:4:=20Warning:=20More=20= than=20one=20`interactive'=20form"=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20"258:4:=20Warning:=20More=20than=20one=20`interactive'=20form"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"257:4:=20Warning:=20= `declare'=20after=20`interactive'"=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20"265:4:=20Warning:=20More=20than=20one=20`interactive'=20form"=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"264:4:=20Warning:=20= `declare'=20after=20`interactive'")))=0A+=20=20=20=20=20=20=20=20= (goto-char=20(point-min))=0A+=20=20=20=20=20=20=20=20(let=20((actual=20= nil))=0A+=20=20=20=20=20=20=20=20=20=20(while=20(re-search-forward=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rx=20bol=20(*=20(not=20= ":"))=20":"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20(group=20(+=20digit)=20":"=20(+=20digit)=20":=20Warning:=20"=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(or=20"More=20than=20one=20"=20(+=20nonl)=20"=20form"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(:=20(+=20nonl)=20"=20after=20"=20(+=20nonl))))=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20eol)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20nil=20t)=0A+=20=20=20=20=20=20= =20=20=20=20=20=20(push=20(match-string=201)=20actual))=0A+=20=20=20=20=20= =20=20=20=20=20(setq=20actual=20(nreverse=20actual))=0A+=20=20=20=20=20=20= =20=20=20=20(should=20(equal=20actual=20expected)))))))=0A+=0A+=0A=20;;=20= Local=20Variables:=0A=20;;=20no-byte-compile:=20t=0A=20;;=20End:=0A--=20=0A= 2.32.0=20(Apple=20Git-132)=0A=0A= --Apple-Mail=_FCB02B89-EC3B-403F-99E8-F6FB490350E1-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 11 08:45:10 2022 Received: (at 55905) by debbugs.gnu.org; 11 Jun 2022 12:45:10 +0000 Received: from localhost ([127.0.0.1]:52081 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o00UI-00075i-BC for submit@debbugs.gnu.org; Sat, 11 Jun 2022 08:45:10 -0400 Received: from quimby.gnus.org ([95.216.78.240]:44544) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o00UG-0006y4-Ji for 55905@debbugs.gnu.org; Sat, 11 Jun 2022 08:45:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=8Dmwga5YxessS8gevO+PTJq68oK0aeDiFh1wnUuqiuk=; b=IsHBFWDx+0dz6SF7IIJrYDQ9KF kGq+JUmOEA2euV6LuWdkjHK37Ylzz3GscpwpcK5rnNIfBW2/0QuwiUOsVAhJ66vHFEUjG8U5lsHY6 5+QQqfb7YVOz2J6mJJyohcTH0Q3oRTZqSt00tPpCt1/vwiPF/RrjNs1iORRe9FCuQVlw=; Received: from [84.212.220.105] (helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o00U7-0000w7-Rs; Sat, 11 Jun 2022 14:45:02 +0200 From: Lars Ingebrigtsen To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Subject: Re: bug#55905: warn about misplaced or duplicated doc strings, `declare` or `interactive` forms References: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> X-Now-Playing: Various's _We Are Not Alone Pt. 1_: "RE-15" Date: Sat, 11 Jun 2022 14:44:59 +0200 In-Reply-To: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Sat, 11 Jun 2022 14:07:03 +0200") Message-ID: <87leu3qshg.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Mattias EngdegÄrd writes: > In function definitions, doc strings, `declare` and `interactive` > forms are each optional but must appear in that order and duplications > are not permitted. Many violations against these rules go [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 55905 Cc: 55905@debbugs.gnu.org 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.3 (---) Mattias Engdeg=C3=A5rd writes: > In function definitions, doc strings, `declare` and `interactive` > forms are each optional but must appear in that order and duplications > are not permitted. Many violations against these rules go undetected. > > The attached patch adds checks to `defun` and `defmacro`. Violations > result in compilation warnings but it could be changed into hard > errors if desired. It also accepts `(:documentation EXPR)` as > alternative to a doc string literal, which currently doesn't work i > all cases. This is most welcome -- I can never remember myself what the order of declare and interactive is. --=20 (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 12 08:45:45 2022 Received: (at 55905) by debbugs.gnu.org; 12 Jun 2022 12:45:46 +0000 Received: from localhost ([127.0.0.1]:55020 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o0MyP-0007TG-Mm for submit@debbugs.gnu.org; Sun, 12 Jun 2022 08:45:45 -0400 Received: from mail205c50.megamailservers.eu ([91.136.10.215]:58824 helo=mail193c50.megamailservers.eu) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o0MyK-0007T3-5O for 55905@debbugs.gnu.org; Sun, 12 Jun 2022 08:45:44 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1655037938; bh=83I2KgYG9NfiM4J1sV5km64+EEab5GpLpBb+17pGOrY=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=X/NplNihnwZXVKMVz7Nghf/Je1iQmVgblBWakEUtHZoNzTxIln76L6f8xeHD16NHm wDiIUFWbgis4vlxNupGTvSczHKc4HppwoYz5nVhp29CAf71eu2qNL1FwT4j2/NXrdP DUdFTKON9BdYxfK6Y4J2MkrvuBBaQVHJOyKwwhWc= Feedback-ID: mattiase@acm.or Received: from smtpclient.apple (c188-150-171-71.bredband.tele2.se [188.150.171.71]) (authenticated bits=0) by mail193c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 25CCjaYm019557; Sun, 12 Jun 2022 12:45:37 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.13\)) Subject: Re: bug#55905: warn about misplaced or duplicated doc strings, `declare` or `interactive` forms From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <87tu8q84fq.fsf@dick> Date: Sun, 12 Jun 2022 14:45:35 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <440CA984-C283-4DFF-936E-78096874D0D1@acm.org> References: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> <87tu8q84fq.fsf@dick> To: dick X-Mailer: Apple Mail (2.3654.120.0.1.13) X-CTCH-RefID: str=0001.0A782F1E.62A5DFF2.001C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-Origin-Country: SE X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 55905 Cc: 55905@debbugs.gnu.org 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: -0.7 (/) > Come offer your free labor to Commercial Emacs. We rectified > (and test!) the byte-compiler line annotations without vitiating the > Lisp implementation with BASE_EQ, which I know you've wasted time on. That's nice, but why don't you just `#define BASE_EQ EQ` and avoid = gratuitous divergence from the GNU tree and save yourself some time (as = well as avoiding future merge conflicts)? From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 12 18:25:43 2022 Received: (at 55905) by debbugs.gnu.org; 12 Jun 2022 22:25:43 +0000 Received: from localhost ([127.0.0.1]:56626 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o0W1e-0007cW-7Y for submit@debbugs.gnu.org; Sun, 12 Jun 2022 18:25:43 -0400 Received: from mail-qt1-f175.google.com ([209.85.160.175]:45007) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o0MTo-0006gm-Bo for 55905@debbugs.gnu.org; Sun, 12 Jun 2022 08:14:10 -0400 Received: by mail-qt1-f175.google.com with SMTP id t21so2264912qtw.11 for <55905@debbugs.gnu.org>; Sun, 12 Jun 2022 05:14:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=YoDkgAkWHlLDheqLplsVlf3/TTegKOrud5j+hLOQNdI=; b=TXMaQqJcoHIM8rIH5v62GH2YM/RNNgLevHmEVwB6zizppTACMJeyQVQA2L0c98yWeF DX0tMhZ2ztmAVWRK/IpYzmXTy3dquEDkTG9lPMT8WWVs+R17lUZbm+tzmw6yBfbyBHYp Gy3cQmmZb0eBoh3NprNbB5r0BWHlNt7H+VElUVL3cVKev5VIFsUBjM4azl1w+WMBfRTF J/Es1RPW3y6/3gfApo6n5OK7f781+htEWEZrwCQLfQwVz8roY75Ua2W0PGoCi9kr7Ijf uKuGgvIqrNW+7VGOZ+FE8m/RsMAoYbnHYyJeY7ys1gLBE3V0q/65KCmVDChcZtOecxQA ybTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=YoDkgAkWHlLDheqLplsVlf3/TTegKOrud5j+hLOQNdI=; b=1+pDq9Kz/D+NQOL4DHZIA9YBaTQ60e6+cF05U2Z85nj6Wr3JM8UKbWlygkabtIJOKF jepPXjr78T4AuHd8s6SoaCXJ75UY81mQc/UIGkekzg/V1fxYlO0zKcWn/Dmu5t76mR5X DCYM2t6bZcAFHEsg77ROe/+XMSu6357ac3w32Wzdb0/wJ4JdKuz6hsbMGFoQ6jrnAuMT bgaZ0nVLrYJn4zRu1ExgpR/NMPPDH2FDE8jy72vKVQUMQx2CCRE4UOyI6AubwswHcWur lWfgb1Bh4KIf0EcOs/nUXfbJABBOHmCMF9UVyKVKnSJrgf9d0ffxApIjLXS9V5B/sxB7 yCtw== X-Gm-Message-State: AOAM530/8PsUS9LrHaCT2HBmcZ6y9YoR64LDNJ2vHHYmriSDpfrlnpoS DOIuk15xm3BbhWgJQMNB3TI= X-Google-Smtp-Source: ABdhPJyJXLxZteqs/In0YQrLuaUcHMzoWtNFn/eRa+PEI3gSDhrXD7dztnhfOn+wq3rAWZDMMgivKQ== X-Received: by 2002:ac8:5d92:0:b0:305:1161:7cdc with SMTP id d18-20020ac85d92000000b0030511617cdcmr12816825qtx.308.1655036042623; Sun, 12 Jun 2022 05:14:02 -0700 (PDT) Received: from localhost (pool-108-6-130-155.nycmny.fios.verizon.net. [108.6.130.155]) by smtp.gmail.com with ESMTPSA id m13-20020ac866cd000000b00304ed2c0f25sm2907689qtp.50.2022.06.12.05.14.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 05:14:01 -0700 (PDT) From: dick To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Subject: Re: bug#55905: warn about misplaced or duplicated doc strings, `declare` or `interactive` forms References: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> Date: Sun, 12 Jun 2022 08:14:01 -0400 In-Reply-To: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Sat, 11 Jun 2022 14:07:03 +0200") Message-ID: <87tu8q84fq.fsf@dick> User-Agent: Gnus/5.14 (Gnus v5.14) Commercial/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 55905 X-Mailman-Approved-At: Sun, 12 Jun 2022 18:25:40 -0400 Cc: 55905@debbugs.gnu.org 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 (-) Come offer your free labor to Commercial Emacs. We rectified (and test!) the byte-compiler line annotations without vitiating the Lisp implementation with BASE_EQ, which I know you've wasted time on. From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 12 18:25:43 2022 Received: (at 55905) by debbugs.gnu.org; 12 Jun 2022 22:25:43 +0000 Received: from localhost ([127.0.0.1]:56628 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o0W1f-0007cZ-7g for submit@debbugs.gnu.org; Sun, 12 Jun 2022 18:25:43 -0400 Received: from mail-qt1-f173.google.com ([209.85.160.173]:45861) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o0NHx-00081P-FE for 55905@debbugs.gnu.org; Sun, 12 Jun 2022 09:06:11 -0400 Received: by mail-qt1-f173.google.com with SMTP id x16so2305650qtw.12 for <55905@debbugs.gnu.org>; Sun, 12 Jun 2022 06:05:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=nH2+dZIYPbu3hQ9pief0viKXeT3M+bVYeW4I7n3vIa8=; b=kxKKBsGUA/DZmVFW7wa8R9z1oiveBg6SbgRF8M7dIMTH3sc5IA9s1oQUuLg0j9U+KW ilfafpJwWnUVXhn3wWXE/JfhgmNH0aZp9tsTTDaSjVtNGcsw2IK2TsPdvdmWHvsYuXAk ZuIhsemWH1k/RMrkYWzZSFAHkmXfq+vNzEuWbchGHDEZxBZduB3kkydDLyqo2krvoZzl kP0zHzOVsmBhDA9bAF2oS5o4dYzMuEUuJKBD3+t8DO5RVQrFYqrsH1Csu2SxzHWBVS2V yiFavxZPw+xaQKVKKSuL74V9Z/UfEgTw/C8V+Mwra89jz4hWXvS800djkp+zIgs5HlbW naZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=nH2+dZIYPbu3hQ9pief0viKXeT3M+bVYeW4I7n3vIa8=; b=uPVQ9Um1HGSkhmeDC2TcRgfFyxLLPKigki5GrFD+ks+UdgPqwytBdGzT4YlzsheHTC 1NMYqwlKD5Uz/qtBuykneoekhG+juUBJyZ8LLT02GFMU5WbnXaZAYtp3rdZtvuIGQIQb kSKLdcyy6xt7gzI4JqB/0+XG6DEF0i3txmrf8dMCl4nxy9S+i1LtEDkw9PJBiBDwpWOz 5dG3ILfVHdJsh7k+trah09s0n9pCFSsqQv4SKpT18NVf+bu4ero7lHp0Lvt/gZE8MrwW Fq/ZDpSrMYT518B+UpDzf7ONw6eE321feVFe7FBNaYajSecc1OuwWjddDCHtnkoahv8V 3c7Q== X-Gm-Message-State: AOAM533jcPjwShzaJ3l48jfx0hboHgQofpXl6AvkTVRh8aXeGsFx+IpS MoDbDXgS5bcRuAN4tPuReCM7Au9MfNo= X-Google-Smtp-Source: ABdhPJxxD2notlgXZFr99B2ovdKMuG6zwHFlEojBYaVqigrFgwZakkmwyQ9MprNyWyc97YO4pAnDvQ== X-Received: by 2002:ac8:598f:0:b0:305:8f8:2069 with SMTP id e15-20020ac8598f000000b0030508f82069mr16737953qte.370.1655039151879; Sun, 12 Jun 2022 06:05:51 -0700 (PDT) Received: from localhost (pool-108-6-130-155.nycmny.fios.verizon.net. [108.6.130.155]) by smtp.gmail.com with ESMTPSA id h26-20020ac8745a000000b003050032703fsm2974441qtr.64.2022.06.12.06.05.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jun 2022 06:05:51 -0700 (PDT) From: dick To: Mattias =?utf-8?Q?Engdeg=C3=A5rd?= Subject: Re: bug#55905: warn about misplaced or duplicated doc strings, `declare` or `interactive` forms References: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> <87tu8q84fq.fsf@dick> <440CA984-C283-4DFF-936E-78096874D0D1@acm.org> Date: Sun, 12 Jun 2022 09:05:50 -0400 In-Reply-To: <440CA984-C283-4DFF-936E-78096874D0D1@acm.org> ("Mattias =?utf-8?Q?Engdeg=C3=A5rd=22's?= message of "Sun, 12 Jun 2022 14:45:35 +0200") Message-ID: <87pmje821d.fsf@dick> User-Agent: Gnus/5.14 (Gnus v5.14) Commercial/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 55905 X-Mailman-Approved-At: Sun, 12 Jun 2022 18:25:40 -0400 Cc: 55905@debbugs.gnu.org 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 (-) Ha, I considered that but the marginal cost of symbols-with-positions conflicts wasn't sufficiently high to introduce `#define BASE_EQ EQ`. We knew it'd be a tough sell to OG devs to turn their backs on GNU, but we had to try. So long as non-free software exists, we shall continue the fight (since our operations rely on such non-free software). From debbugs-submit-bounces@debbugs.gnu.org Fri Jun 17 11:30:30 2022 Received: (at 55905-done) by debbugs.gnu.org; 17 Jun 2022 15:30:30 +0000 Received: from localhost ([127.0.0.1]:46734 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o2DvZ-0003GY-PH for submit@debbugs.gnu.org; Fri, 17 Jun 2022 11:30:30 -0400 Received: from mail1451c50.megamailservers.eu ([91.136.14.51]:37568 helo=mail266c50.megamailservers.eu) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o2DvX-00037K-30 for 55905-done@debbugs.gnu.org; Fri, 17 Jun 2022 11:30:28 -0400 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1655479820; bh=65QPo9GsssK7lAAsx4si6fhUPe/7LtANspscO4xCRxs=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=s1jIvSdC1eP78MEK60bAjSaCzq8CmpgzZCuOy+YwwYwM7Us8r1nEebsSzYjNaJcGJ ssoMjrhS3LrKeXfyV7iErmTPqV7wUxpPcTSS5E1VPaghgMibmEOQwTGzOtQbA72Qm2 SHzH82otpPvMYbF9B8+biUGFfhUHZDMcAUX+zUVY= Feedback-ID: mattiase@acm.or Received: from smtpclient.apple (c188-150-171-71.bredband.tele2.se [188.150.171.71]) (authenticated bits=0) by mail266c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 25HFUIOr095313; Fri, 17 Jun 2022 15:30:19 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.13\)) Subject: Re: bug#55905: warn about misplaced or duplicated doc strings, `declare` or `interactive` forms From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= In-Reply-To: <87leu3qshg.fsf@gnus.org> Date: Fri, 17 Jun 2022 17:30:17 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <7541DAE8-38BD-4CF6-A652-744E31C42442@acm.org> <87leu3qshg.fsf@gnus.org> To: Lars Ingebrigtsen X-Mailer: Apple Mail (2.3654.120.0.1.13) X-CTCH-RefID: str=0001.0A782F17.62AC9E0C.0023, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-Origin-Country: SE X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: 11 juni 2022 kl. 14.44 skrev Lars Ingebrigtsen : > This is most welcome -- I can never remember myself what the order of > declare and interactive is. Same here (which prompted the patch). A slightly updated version has now been pushed to master. Content analysis details: (1.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) -0.0 T_SCC_BODY_TEXT_LINE No description available. 0.3 KHOP_HELO_FCRDNS Relay HELO differs from its IP's reverse DNS X-Debbugs-Envelope-To: 55905-done Cc: 55905-done@debbugs.gnu.org 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: -0.0 (/) 11 juni 2022 kl. 14.44 skrev Lars Ingebrigtsen : > This is most welcome -- I can never remember myself what the order of > declare and interactive is. Same here (which prompted the patch). A slightly updated version has now = been pushed to master. There's the possibility of making the parsing more tolerant with respect = to ordering, and possibly allow multiple `declare` forms. It would be = easy enough. From unknown Wed Jun 18 00:14:16 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 16 Jul 2022 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