From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Newsgroups: gmane.emacs.bugs Subject: bug#39373: 27.0.50; [PATCH] mode-local-print-bindings broken with lexical-binding Date: Sat, 1 Feb 2020 20:24:56 +0100 Message-ID: <3FB58E0B-E1DB-4709-98AB-92A45508486A@acm.org> References: <495920D0-A298-43BF-99E6-B5ADA06113CB@acm.org> <83lfpnjuiz.fsf@gnu.org> <928DB820-6899-4653-8872-82CE3CF567CD@acm.org> <83imkrjrvh.fsf@gnu.org> <8EF7D3C6-041D-493F-859B-55D8D35AF588@acm.org> <83eevekat8.fsf@gnu.org> Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_8AFC5F9C-7065-4C63-B719-A12C7B284675" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="51034"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 39373@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Feb 01 20:26:12 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ixyPD-000D5q-TD for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 01 Feb 2020 20:26:12 +0100 Original-Received: from localhost ([::1]:48944 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ixyPC-0006QW-SA for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 01 Feb 2020 14:26:10 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57447) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ixyP5-0006QM-2b for bug-gnu-emacs@gnu.org; Sat, 01 Feb 2020 14:26:04 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ixyP3-00058W-VP for bug-gnu-emacs@gnu.org; Sat, 01 Feb 2020 14:26:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:33373) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ixyP3-00058O-Rd for bug-gnu-emacs@gnu.org; Sat, 01 Feb 2020 14:26:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ixyP3-0006JF-NG for bug-gnu-emacs@gnu.org; Sat, 01 Feb 2020 14:26:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 01 Feb 2020 19:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39373 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 39373-submit@debbugs.gnu.org id=B39373.158058510424179 (code B ref 39373); Sat, 01 Feb 2020 19:26:01 +0000 Original-Received: (at 39373) by debbugs.gnu.org; 1 Feb 2020 19:25:04 +0000 Original-Received: from localhost ([127.0.0.1]:39346 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixyO8-0006Hv-6C for submit@debbugs.gnu.org; Sat, 01 Feb 2020 14:25:04 -0500 Original-Received: from mail173c50.megamailservers.eu ([91.136.10.183]:35012 helo=mail56c50.megamailservers.eu) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixyO5-0006HR-Ik for 39373@debbugs.gnu.org; Sat, 01 Feb 2020 14:25:02 -0500 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1580585099; bh=49B34+XMXbRHP0WQ2tXnWbEIioAdEm5Eqr3BSaFXCV8=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=K8X0onBZ7TQsDmQz5hlGk/x4jmbC52IARVD9sQZkqwFfK9FN7qDDxX+dijWdTkPI4 lULGJ9rm2w51/MbmnxP1DScYglcyMtYM017tc9lKxdxM/h3GHQydj1WEZdA57DNwAX cHaqwGLD9btB8I5qHgDBB6Tj/bBe5t+1NKWl9wWw= Feedback-ID: mattiase@acm.or Original-Received: from stanniol.lan (c-6f4fe655.032-75-73746f71.bbcust.telenor.se [85.230.79.111]) (authenticated bits=0) by mail56c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 011JOuaO023646; Sat, 1 Feb 2020 19:24:58 +0000 In-Reply-To: <83eevekat8.fsf@gnu.org> X-Mailer: Apple Mail (2.3445.104.11) X-CTCH-RefID: str=0001.0A0B0212.5E35D08B.0014, 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-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=Hc1qsRM8 c=1 sm=1 tr=0 a=fHaj9vQUQVKQ4sUldAaXuQ==:117 a=fHaj9vQUQVKQ4sUldAaXuQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=6OtYOO8Av_4Lg4D20V4A:9 a=CjuIK1q_8ugA:10 a=HvU0dG_389u4s91MisEA:9 a=B2y7HmGcmWMA:10 a=mP4ZM0_zIS7DOXXc2F0A:9 a=_FVE-zBwftR9WsbkzFJk:22 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:175566 Archived-At: --Apple-Mail=_8AFC5F9C-7065-4C63-B719-A12C7B284675 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 1 feb. 2020 kl. 08.48 skrev Eli Zaretskii : > If that's the case, then why don't we say that loud and clear in the > ELisp manual? (The doc string of add-to-list has some vague > recommendation, not sure if it really talks about this aspect, but > that's definitely not enough for such a serious issue.) >=20 > And doesn't it mean we should audit all the gazillion uses of > add-to-list in our sources, and do that urgently? Yes, I agree, but it's not quite as simple as I thought at first. A = mechanised scan of the source for uses of add-to-list on lexical = variables revealed a handful: lisp/cedet/mode-local.el:823:23: add-to-list to lexical variable mc lisp/net/tramp-cache.el:376:45: add-to-list to lexical variable = properties lisp/net/tramp-cache.el:430:25: add-to-list to lexical variable result lisp/net/zeroconf.el:259:40: add-to-list to lexical variable result lisp/net/zeroconf.el:267:40: add-to-list to lexical variable result lisp/net/zeroconf.el:281:23: add-to-list to lexical variable result lisp/org/org.el:18685:49: add-to-list to lexical variable load-uncore lisp/autoinsert.el:174:47: add-to-list to lexical variable modes lisp/whitespace.el:1687:33: add-to-list to lexical variable style test/lisp/emacs-lisp/map-tests.el:230:30: add-to-list to lexical = variable result However, add-to-list has a compiler macro which tries to make it work = even for lexical variables, and it mostly does -- specifically, when the = LIST-VAR parameter is on the form (quote VARIABLE), which is the case in = all the above cases except the one i mode-local.el. The macro (which apparently works in non-compiled code as well) attempts = to warn about lexical variables but somehow this warning doesn't always = trigger. I haven't researched this further. It all seems rather fragile to me, and I'd rather add a note about not = using add-to-list for lexical variables to its doc string and the = manual, and fix all the calls listed above. However, this last point is = not strictly necessary for correctness. Two patches attached: a doc update, and a replacement of add-to-list in = the cases listed above. --Apple-Mail=_8AFC5F9C-7065-4C63-B719-A12C7B284675 Content-Disposition: attachment; filename=0001-Clarify-add-to-list-documentation-bug-39373.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Clarify-add-to-list-documentation-bug-39373.patch" Content-Transfer-Encoding: quoted-printable =46rom=20e7535d23b0855307a93ea6e8fa7cf7fb5910ac56=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Sat,=201=20Feb=202020=2020:11:11=20+0100=0A= Subject:=20[PATCH=201/2]=20Clarify=20add-to-list=20documentation=20= (bug#39373)=0A=0AWhile=20add-to-list=20often=20works=20with=20lexical=20= variables,=20this=20is=20a=20hack=0Athat=20isn't=20always=20effective;=20= better=20tell=20the=20user=20not=20to=20try.=0A=0A*=20= doc/lispref/lists.texi=20(List=20Variables):=20Add=20a=20note=20about=20= lexical=0Avariables=20to=20the=20add-to-list=20description.=20=20Fix=20= the=20equivalent=20code.=0A*=20lisp/subr.el=20(add-to-list):=20Amend=20= doc=20string.=0A---=0A=20doc/lispref/lists.texi=20|=208=20++++++--=0A=20= lisp/subr.el=20=20=20=20=20=20=20=20=20=20=20|=201=20+=0A=202=20files=20= changed,=207=20insertions(+),=202=20deletions(-)=0A=0Adiff=20--git=20= a/doc/lispref/lists.texi=20b/doc/lispref/lists.texi=0Aindex=20= 5ef21d0671..ce0d9a3c92=20100644=0A---=20a/doc/lispref/lists.texi=0A+++=20= b/doc/lispref/lists.texi=0A@@=20-777,6=20+777,9=20@@=20List=20Variables=0A= =20The=20argument=20@var{symbol}=20is=20not=20implicitly=20quoted;=20= @code{add-to-list}=0A=20is=20an=20ordinary=20function,=20like=20= @code{set}=20and=20unlike=20@code{setq}.=20=20Quote=0A=20the=20argument=20= yourself=20if=20that=20is=20what=20you=20want.=0A+=0A+Do=20not=20use=20= this=20function=20when=20@var{symbol}=20refers=20to=20a=20lexical=0A= +variable.=0A=20@end=20defun=0A=20=0A=20Here's=20a=20scenario=20showing=20= how=20to=20use=20@code{add-to-list}:=0A@@=20-799,8=20+802,9=20@@=20List=20= Variables=0A=20@var{value})}=20is=20this:=0A=20=0A=20@example=0A-(or=20= (member=20@var{value}=20@var{var})=0A-=20=20=20=20(setq=20@var{var}=20= (cons=20@var{value}=20@var{var})))=0A+(if=20(member=20@var{value}=20= @var{var})=0A+=20=20=20=20@var{var}=0A+=20=20(setq=20@var{var}=20(cons=20= @var{value}=20@var{var})))=0A=20@end=20example=0A=20=0A=20@defun=20= add-to-ordered-list=20symbol=20element=20&optional=20order=0Adiff=20= --git=20a/lisp/subr.el=20b/lisp/subr.el=0Aindex=20a4fdc6bdfe..05fb82321e=20= 100644=0A---=20a/lisp/subr.el=0A+++=20b/lisp/subr.el=0A@@=20-1845,6=20= +1845,7=20@@=20add-to-list=0A=20If=20ELEMENT=20is=20added,=20it=20is=20= added=20at=20the=20beginning=20of=20the=20list,=0A=20unless=20the=20= optional=20argument=20APPEND=20is=20non-nil,=20in=20which=20case=0A=20= ELEMENT=20is=20added=20at=20the=20end.=0A+LIST-VAR=20should=20not=20= refer=20to=20a=20lexical=20variable.=0A=20=0A=20The=20return=20value=20= is=20the=20new=20value=20of=20LIST-VAR.=0A=20=0A--=20=0A2.21.1=20(Apple=20= Git-122.3)=0A=0A= --Apple-Mail=_8AFC5F9C-7065-4C63-B719-A12C7B284675 Content-Disposition: attachment; filename=0002-Replace-add-to-list-to-lexical-variable-with-push-bu.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0002-Replace-add-to-list-to-lexical-variable-with-push-bu.patch" Content-Transfer-Encoding: quoted-printable =46rom=204501670056beed4c8e709674b3b80dc2a1160c0b=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Sat,=201=20Feb=202020=2018:07:32=20+0100=0A= Subject:=20[PATCH=202/2]=20Replace=20add-to-list=20to=20lexical=20= variable=20with=20push=0A=20(bug#39373)=0A=0ASince=20'add-to-list',=20= being=20a=20plain=20function,=20cannot=20access=20lexical=0Avariables,=20= such=20use=20must=20be=20rewritten=20for=20correctness.=0A=0A*=20= lisp/autoinsert.el=20(auto-insert-alist):=0A*=20lisp/cedet/mode-local.el=20= (mode-local-print-bindings):=0A*=20lisp/net/tramp-cache.el=20= (tramp-flush-connection-properties)=0A(tramp-list-connections):=0A*=20= lisp/net/zeroconf.el=20(zeroconf-list-service-names)=0A= (zeroconf-list-service-types,=20zeroconf-list-services):=0A*=20= lisp/org/org.el=20(org-reload):=0A*=20lisp/whitespace.el=20= (whitespace-report-region):=0A*=20test/lisp/emacs-lisp/map-tests.el=20= (test-map-do):=0AReplace=20add-to-list=20with=20push.=0A---=0A=20= lisp/autoinsert.el=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20= 2=20+-=0A=20lisp/cedet/mode-local.el=20=20=20=20=20=20=20=20=20=20|=2014=20= ++++++--------=0A=20lisp/net/tramp-cache.el=20=20=20=20=20=20=20=20=20=20= =20|=20=204=20++--=0A=20lisp/net/zeroconf.el=20=20=20=20=20=20=20=20=20=20= =20=20=20=20|=2012=20++++++------=0A=20lisp/org/org.el=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20|=20=205=20+++--=0A=20= lisp/whitespace.el=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20= 2=20+-=0A=20test/lisp/emacs-lisp/map-tests.el=20|=20=202=20+-=0A=207=20= files=20changed,=2020=20insertions(+),=2021=20deletions(-)=0A=0Adiff=20= --git=20a/lisp/autoinsert.el=20b/lisp/autoinsert.el=0Aindex=20= 9bc3aad278..25961d4108=20100644=0A---=20a/lisp/autoinsert.el=0A+++=20= b/lisp/autoinsert.el=0A@@=20-171,7=20+171,7=20@@=20auto-insert-alist=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(mapatoms=20(lambda=20= (mode)=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(let=20((name=20(symbol-name=20mode)))=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(when=20(string-match=20"-mode$"=20name)=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(add-to-list=20'modes=20name)))))=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= (push=20name=20modes)))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20(sort=20modes=20'string<)))=0A=20=20=20=20=20=20= (completing-read=20"Local=20variables=20for=20mode:=20"=20v1=20nil=20t)=0A= =20=20=20=20=20=20"=20.=20(("=0Adiff=20--git=20= a/lisp/cedet/mode-local.el=20b/lisp/cedet/mode-local.el=0Aindex=20= a6e143cfcd..a1aea30c20=20100644=0A---=20a/lisp/cedet/mode-local.el=0A+++=20= b/lisp/cedet/mode-local.el=0A@@=20-819,14=20+819,12=20@@=20= mode-local-print-bindings=0A=20=20=20=20=20=20=20=20=20)=0A=20=20=20=20=20= ;;=20Order=20symbols=20by=20type=0A=20=20=20=20=20(mapatoms=0A-=20=20=20=20= =20#'(lambda=20(s)=0A-=20=20=20=20=20=20=20=20=20(add-to-list=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= ((get=20s=20'mode-variable-flag)=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(if=20(get=20s=20'constant-flag)=20'mc=20= 'mv))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20((get=20s=20'override-flag)=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(if=20(get=20s=20'constant-flag)=20'fo=20= 'ov))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20('us))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20s))=0A+=20=20=20=20=20(lambda=20(s)=20(push=20s=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=20=20=20= ((get=20s=20'mode-variable-flag)=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(if=20(get=20s=20= 'constant-flag)=20mc=20mv))=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((get=20s=20'override-flag)=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= (if=20(get=20s=20'constant-flag)=20fo=20ov))=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(t=20us))))=0A=20=20=20= =20=20=20table)=0A=20=20=20=20=20;;=20Print=20symbols=20by=20type=0A=20=20= =20=20=20(when=20us=0Adiff=20--git=20a/lisp/net/tramp-cache.el=20= b/lisp/net/tramp-cache.el=0Aindex=20b81a1a23d5..62e25fa1f0=20100644=0A= ---=20a/lisp/net/tramp-cache.el=0A+++=20b/lisp/net/tramp-cache.el=0A@@=20= -373,7=20+373,7=20@@=20tramp-flush-connection-properties=0A=20=20=20=20= (let=20((hash=20(gethash=20key=20tramp-cache-data))=0A=20=09=20= properties)=0A=20=20=20=20=20=20(when=20(hash-table-p=20hash)=0A-=20=20=20= =20=20=20=20(maphash=20(lambda=20(x=20_y)=20(add-to-list=20'properties=20= x=20'append))=20hash))=0A+=20=20=20=20=20=20=20(maphash=20(lambda=20(x=20= _y)=20(push=20x=20properties))=20hash))=0A=20=20=20=20=20=20properties))=0A= =20=20=20(setq=20tramp-cache-data-changed=20t)=0A=20=20=20(remhash=20key=20= tramp-cache-data))=0A@@=20-427,7=20+427,7=20@@=20tramp-list-connections=0A= =20=09=20(when=20(and=20(tramp-file-name-p=20key)=0A=20=09=09=20=20=20=20= (null=20(tramp-file-name-localname=20key))=0A=20=09=09=20=20=20=20= (tramp-connection-property-p=20key=20"process-buffer"))=0A-=09=20=20=20= (add-to-list=20'result=20key)))=0A+=09=20=20=20(push=20key=20result)))=0A= =20=20=20=20=20=20=20=20tramp-cache-data)=0A=20=20=20=20=20=20=20= result))=0A=20=0Adiff=20--git=20a/lisp/net/zeroconf.el=20= b/lisp/net/zeroconf.el=0Aindex=20b8becd712f..cb3c0f2a7e=20100644=0A---=20= a/lisp/net/zeroconf.el=0A+++=20b/lisp/net/zeroconf.el=0A@@=20-256,17=20= +256,17=20@@=20zeroconf-list-service-names=0A=20=20=20"Return=20all=20= discovered=20Avahi=20service=20names=20as=20list."=0A=20=20=20(let=20= (result)=0A=20=20=20=20=20(maphash=0A-=20=20=20=20=20(lambda=20(_key=20= value)=20(add-to-list=20'result=20(zeroconf-service-name=20value)))=0A+=20= =20=20=20=20(lambda=20(_key=20value)=20(push=20(zeroconf-service-name=20= value)=20result))=0A=20=20=20=20=20=20zeroconf-services-hash)=0A-=20=20=20= =20result))=0A+=20=20=20=20(delete-dups=20result)))=0A=20=0A=20(defun=20= zeroconf-list-service-types=20()=0A=20=20=20"Return=20all=20discovered=20= Avahi=20service=20types=20as=20list."=0A=20=20=20(let=20(result)=0A=20=20= =20=20=20(maphash=0A-=20=20=20=20=20(lambda=20(_key=20value)=20= (add-to-list=20'result=20(zeroconf-service-type=20value)))=0A+=20=20=20=20= =20(lambda=20(_key=20value)=20(push=20(zeroconf-service-type=20value)=20= result))=0A=20=20=20=20=20=20zeroconf-services-hash)=0A-=20=20=20=20= result))=0A+=20=20=20=20(delete-dups=20result)))=0A=20=0A=20(defun=20= zeroconf-list-services=20(type)=0A=20=20=20"Return=20all=20discovered=20= Avahi=20services=20for=20a=20given=20service=20type=20TYPE.=0A@@=20= -278,9=20+278,9=20@@=20zeroconf-list-services=0A=20=20=20=20=20(maphash=0A= =20=20=20=20=20=20(lambda=20(_key=20value)=0A=20=20=20=20=20=20=20=20= (when=20(equal=20type=20(zeroconf-service-type=20value))=0A-=09=20= (add-to-list=20'result=20value)))=0A+=09=20(push=20value=20result)))=0A=20= =20=20=20=20=20zeroconf-services-hash)=0A-=20=20=20=20result))=0A+=20=20=20= =20(delete-dups=20result)))=0A=20=0A=20(defvar=20= zeroconf-service-added-hooks-hash=20(make-hash-table=20:test=20'equal)=0A= =20=20=20"Hash=20table=20of=20hooks=20for=20newly=20added=20services.=0A= diff=20--git=20a/lisp/org/org.el=20b/lisp/org/org.el=0Aindex=20= 5c8b02b9d1..568f5b9b87=20100644=0A---=20a/lisp/org/org.el=0A+++=20= b/lisp/org/org.el=0A@@=20-18682,13=20+18682,14=20@@=20org-reload=0A=20=09= =09=09=20=20=20=20=20=20(and=20(string=3D=20org-dir=20contrib-dir)=0A=20=09= =09=09=09=20=20=20(org-load-noerror-mustsuffix=20(concat=20contrib-dir=20= f)))=0A=20=09=09=09=20=20=20=20=20=20(and=20(org-load-noerror-mustsuffix=20= (concat=20(org-find-library-dir=20f)=20f))=0A-=09=09=09=09=20=20=20= (add-to-list=20'load-uncore=20f=20'append)=0A+=09=09=09=09=20=20=20(push=20= f=20load-uncore)=0A=20=09=09=09=09=20=20=20't)=0A=20=09=09=09=20=20=20=20= =20=20f))=0A=20=09=09=09lfeat)))=0A=20=20=20=20=20(when=20load-uncore=0A=20= =20=20=20=20=20=20(message=20"The=20following=20feature%s=20found=20in=20= load-path,=20please=20check=20if=20that's=20correct:\n%s"=0A-=09=20=20=20= =20=20=20=20(if=20(>=20(length=20load-uncore)=201)=20"s=20were"=20"=20= was")=20load-uncore))=0A+=09=20=20=20=20=20=20=20(if=20(>=20(length=20= load-uncore)=201)=20"s=20were"=20"=20was")=0A+=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(reverse=20load-uncore)))=0A=20=20=20=20=20(if=20= load-misses=0A=20=09(message=20"Some=20error=20occurred=20while=20= reloading=20Org=20feature%s\n%s\nPlease=20check=20*Messages*!\n%s"=0A=20=09= =09=20(if=20(>=20(length=20load-misses)=201)=20"s"=20"")=20load-misses=20= (org-version=20nil=20'full))=0Adiff=20--git=20a/lisp/whitespace.el=20= b/lisp/whitespace.el=0Aindex=20111b175263..db7c023324=20100644=0A---=20= a/lisp/whitespace.el=0A+++=20b/lisp/whitespace.el=0A@@=20-1684,7=20= +1684,7=20@@=20whitespace-report-region=0A=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#'(lambda=20= (option)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(when=20= force=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (add-to-list=20'style=20(car=20option)))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(push=20(car=20option)=20style))=0A=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20(goto-char=20rstart)=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20((regexp=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(cond=0A= diff=20--git=20a/test/lisp/emacs-lisp/map-tests.el=20= b/test/lisp/emacs-lisp/map-tests.el=0Aindex=2006fd55faad..c52bb83fa3=20= 100644=0A---=20a/test/lisp/emacs-lisp/map-tests.el=0A+++=20= b/test/lisp/emacs-lisp/map-tests.el=0A@@=20-227,7=20+227,7=20@@=20= test-map-do=0A=20=20=20(with-maps-do=20map=0A=20=20=20=20=20(let=20= ((result=20nil))=0A=20=20=20=20=20=20=20(map-do=20(lambda=20(k=20v)=0A-=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(add-to-list=20'result=20= (list=20(int-to-string=20k)=20v)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(push=20(list=20(int-to-string=20k)=20v)=20result))=0A=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20map)=0A=20=20=20=20=20=20=20(should=20= (equal=20result=20'(("2"=205)=20("1"=204)=20("0"=203)))))))=0A=20=0A--=20= =0A2.21.1=20(Apple=20Git-122.3)=0A=0A= --Apple-Mail=_8AFC5F9C-7065-4C63-B719-A12C7B284675--