From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Barry OReilly Newsgroups: gmane.emacs.devel Subject: Re: Fontifying outside of region passed to registered JIT lock function Date: Fri, 15 Nov 2013 13:30:32 -0500 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11348500c7d53004eb3b644a X-Trace: ger.gmane.org 1384540244 10241 80.91.229.3 (15 Nov 2013 18:30:44 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 15 Nov 2013 18:30:44 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Nov 15 19:30:47 2013 Return-path: Envelope-to: ged-emacs-devel@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 1VhOAH-0004wz-HH for ged-emacs-devel@m.gmane.org; Fri, 15 Nov 2013 19:30:45 +0100 Original-Received: from localhost ([::1]:33368 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VhOAH-0003s7-5Z for ged-emacs-devel@m.gmane.org; Fri, 15 Nov 2013 13:30:45 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60064) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VhOAC-0003ry-E5 for emacs-devel@gnu.org; Fri, 15 Nov 2013 13:30:42 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VhOA6-0006Sb-RB for emacs-devel@gnu.org; Fri, 15 Nov 2013 13:30:40 -0500 Original-Received: from mail-oa0-x22d.google.com ([2607:f8b0:4003:c02::22d]:62689) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VhOA6-0006S0-2X for emacs-devel@gnu.org; Fri, 15 Nov 2013 13:30:34 -0500 Original-Received: by mail-oa0-f45.google.com with SMTP id m1so4335491oag.4 for ; Fri, 15 Nov 2013 10:30:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=m6Ab5qWdNQESNQUuS+sDpetqDuI77OByDH2bHEenxIU=; b=kSDmtuavZ/nM4QWSmy32H1H4Mm6YXSzc1+BfaT4Z8Ny7/AEdKV9OfBisKr8z5PDaZb COh46rf9dMyozzwlkJ+zwVfDIRZlrzqi39YRyxO1K/AnebTZjETNZaQv/4fBktz9PLFL CngAst8xGXJQsklyj4jU3tkot5qhrPlJWbYfpAtdQaTRWxaWZR/pCNZXatXalbT5HpIS WMfoFRYvpMGeKiLEmd6zY7EaHcGT+mvQF7ZMSKA7wt/rFvOKsyJGXoZr4N9EFVJzZUoo 49GWKl3nGQKgXKzh1iwpeqt4fX1h0h3RaBAwspbeUUnXjj+O6f67ZnKDCKB3iSfJ7p7p QsoA== X-Received: by 10.182.149.168 with SMTP id ub8mr3207426obb.74.1384540233234; Fri, 15 Nov 2013 10:30:33 -0800 (PST) Original-Received: by 10.76.156.103 with HTTP; Fri, 15 Nov 2013 10:30:32 -0800 (PST) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:4003:c02::22d X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:165272 Archived-At: --001a11348500c7d53004eb3b644a Content-Type: multipart/alternative; boundary=001a11348500c7d52c04eb3b6448 --001a11348500c7d52c04eb3b6448 Content-Type: text/plain; charset=ISO-8859-1 > If you explain in more details, we can probably help you figure it > out, I can show you. It's a work in progress, but the basic algorithm is in the attached color-parens.el. Load it, call color-parens-mode, open the attached thread-test-binding.el (which was just a random .el file lying around). You'll see the correct parens fontified in this block: (defun threads-test-thread2 () (let ((threads-test-binding 23)) (thread-yield)) (setq threads-test-global 23)) But not in this block: (progn (setq threads-test-global nil) (make-thread #'threads-test-thread2) (while (not threads-test-global) (thread-yield)) (and (not threads-test-binding) threads-test-global)) The reason is that the regions JIT lock passes begin and end in the middle of the progn list. If you highlight the progn list and 's/^/ /', you'll see the desired fontification, since JIT now passes in the desired region. To explain what I'm doing in simpler terms, suppose you have: (a b c d) The close paren is where the indentation would imply, so there's no coloring of parens. Suppose you edit the code so as it is now: (a b c d) The indentation implies the close paren would be after b. Since it is not, the minor mode wants to update the color of the parens. JIT lock may pass in a region that excludes those parens however. By the way, I'd be interested if something already exists that does something similar: gives some visual indication in Lisp code that close parens and indentation are inconsistent. --001a11348500c7d52c04eb3b6448 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
> If you explain in more details, we can probably help = you figure it
> out,

I can show you. It's a work in progre= ss, but the basic algorithm is in
the attached color-parens.el. Load it,= call color-parens-mode, open
the attached thread-test-binding.el (which was just a random .el file
ly= ing around). You'll see the correct parens fontified in this block:
=
=A0=A0 (defun threads-test-thread2 ()
=A0=A0=A0=A0 (let ((threads-te= st-binding 23))
=A0=A0 (thread-yield))
=A0=A0=A0=A0 (setq threads-test-global 23))
But not in this block:

=A0=A0 (progn
=A0=A0=A0=A0 (setq threads= -test-global nil)
=A0=A0=A0=A0 (make-thread #'threads-test-thread2)<= br>=A0=A0=A0=A0 (while (not threads-test-global)
=A0=A0 (thread-yield))
=A0=A0=A0=A0 (and (not threads-test-binding)
= =A0=A0=A0=A0=A0=A0=A0=A0=A0 threads-test-global))

The reason is that= the regions JIT lock passes begin and end in the
middle of the progn li= st.

If you highlight the progn list and 's/^/ /', you'll= see
the desired fontification, since JIT now passes in the desired region.
<= br>To explain what I'm doing in simpler terms, suppose you have:
=A0=A0 (a b
=A0=A0=A0=A0=A0 c
=A0=A0=A0=A0=A0 d)

The close pa= ren is where the indentation would imply, so there's no
coloring of parens.

Suppose you edit the code so as it is now:
=A0=A0 (a b
=A0=A0 c
=A0=A0=A0=A0=A0 d)

The indentation impl= ies the close paren would be after b. Since it is
not, the minor mode wa= nts to update the color of the parens. JIT lock
may pass in a region that excludes those parens however.

By the way,= I'd be interested if something already exists that does
something s= imilar: gives some visual indication in Lisp code that
close parens and = indentation are inconsistent.

--001a11348500c7d52c04eb3b6448-- --001a11348500c7d53004eb3b644a Content-Type: text/x-emacs-lisp; charset=US-ASCII; name="color-parens.el" Content-Disposition: attachment; filename="color-parens.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ho1rgqj20 Ozs7IGNvbG9yLXBhcmVucy5lbCAtLS0gQ29sb3IgdW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBhbmQg cGFyZW50aGVzZXMgaW5jb25zaXN0ZW50IHdpdGggaW5kZW50YXRpb24gLSotIGxleGljYWwtYmlu ZGluZzogdDsgLSotCgo7OyBDb3B5cmlnaHQgKEMpIDIwMTMgIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgoKOzsgQXV0aG9yOiBCYXJyeSBPJ1JlaWxseSA8Z3VuZGFldGlhcG9AZ21haWwu Y29tPgo7OyBWZXJzaW9uOiAwCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgo7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7 IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7Ozsg Q29kZToKCihyZXF1aXJlICdjbC1saWIpCgooZGVmZ3JvdXAgY29sb3ItcGFyZW5zIG5pbAogICJD b2xvciB1bmJhbGFuY2VkIHBhcmVudGhlc2VzIGFuZCBwYXJlbnRoZXNlcyBpbmNvbnNpc3RlbnQg d2l0aCBpbmRlbnRhdGlvbi4iCiAgOnByZWZpeCAiY29sb3ItcGFyZW5zLSIKICA6Z3JvdXAgJ3Bh cmVuLW1hdGNoaW5nKQoKKGRlZmdyb3VwIGNvbG9yLXBhcmVucy1mYWNlcyBuaWwKICAiRmFjZXMg Zm9yIGNvbG9yLXBhcmVucyBwYWNrYWdlLiAiCiAgOmdyb3VwICdjb2xvci1wYXJlbnMKICA6Z3Jv dXAgJ2ZhY2VzKQoKKGRlZmZhY2UgY29sb3ItcGFyZW5zLWluY29uc2lzdGVudAogICcoKCgoY2xh c3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKICAgICA6Zm9yZWdyb3VuZCAiZGFyayBvcmFu Z2UiKQogICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKQogICAgIDpmb3JlZ3Jv dW5kICJvcmFuZ2UiKSkKICAiRmFjZSB0byB1c2UgZm9yIG1hdGNoaW5nIG9wZW4gYW5kIGNsb3Nl IHBhcmVucyB3aG9zZSBwbGFjZW1lbnQKaXMgaW5jb25zaXN0ZW50IHdpdGggaW5kZW50YXRpb24u IgogIDpncm91cCAnY29sb3ItcGFyZW5zLWZhY2VzKQoKOzsgVE9ETzogRmFjZXMgZm9yIG1pc21h dGNoZWQgb3BlbiBhbmQgY2xvc2UKCjs7IFRPRE86IFJlbW92ZSBkZWJ1Z2dpbmcgbWVzc2FnZSBz dGF0ZW1lbnRzCgo7OyBUT0RPOiBUZXN0IGNsb3NlIHBhcmVucyBpbiBkb2Mgb2YgYy1iZWdpbm5p bmctb2Ytc3RhdGVtZW50LTEgaW4KOzsgY2MtZW5naW5lLmVsCgo7OyBUT0RPOiBUaHJlc2hvbGQg Y29sdW1uIGZvciBgKCkgaXMgb2ZmLgo7Owo7OyBDb25zaXN0ZW50Ogo7OyAgIGAoKQo7OyAgICBm b28KOzsKOzsgSW5jb25zaXN0ZW50Ogo7OyAgIGAoKQo7OyAgIGZvbwo7Owo7OyAoQnV0IGZvbnQg bG9jayBpcyBvbiB0aGUgb3BlbiBwYXJlbiwgbm90IHRoZSBiYWNrdGljaykKOzsKOzsgU2ltaWxh cmx5LCAsQCgpIGlzIG9mZiBieSB0d28KCjs7IFRPRE86IEFsZ29yaXRobSBkb2Vzbid0IGFjY291 bnQgZm9yOgo7Owo7OyAoYWJjCjs7ICAgKGRlZikpCjs7ICAoZ2hpKQo7Owo7OyAoYWJjIC4uLikg YXJlIGluY29uc2lzdGVudCBwYXJlbnMgYmVjYXVzZSAoZ2hpKSBpcyBpbmRlbnRlZCB0b28gZmFy Cgo7OyBUT0RPOiBIb3cgdG8gaGFuZGxlOgo7Owo7OyAoYWJjIGEtc3ltYm9sIChhLWZ1bmMtY2Fs bCAid29yZF9hCjs7IHdvcmRfYiIgKGRlZiBnaGkKOzsgICAgICAgICBqa2wpCjs7Cjs7IChhYmMg YS1zeW1ib2wgKGEtZnVuYy1jYWxsICJ3b3JkX2EKOzsgd29yZF9iIiAoZGVmKQo7OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqa2wpKQo7Owo7OyBBbmQgdGhlIGlucHV0dGVkIHJlZ2lvbiBp cyBvbmx5IHRoZSBqa2wgbGluZXMuCjs7Cjs7IFByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIHNpZ25p ZmljYW50bHksIGFzIGxvbmcgYXMgaXQncyBjb25zaXN0ZW50Cjs7IHJlZ2FyZGxlc3Mgb2YgaG93 IEpJVCBpbnB1dHMgdGhlIHJlZ2lvbnMuCgo7OyBBbiBvcGVuIHBhcmVuIGFuZCBhbGdvcml0aG1p YyBkYXRhIGFib3V0IGl0LiBJbnN0YW5jZXMgYXJlIHBsYWNlZAo7OyBvbiBhIHN0YWNrIGFzIHRo aXMgcGFja2FnZXMgcGFyc2VzIGEgYnVmZmVyIHJlZ2lvbi4KOzsKOzsgcG9zaXRpb24gaXMgdGhl IHBvc2l0aW9uIGluIHRoZSBidWZmZXIgb2YgdGhlIG9wZW4gcGFyZW4KOzsKOzsgY29sdW1uIGlz IHRoZSBkaXNwbGF5ZWQgY29sdW1uIG9mIHRoZSBvcGVuIHBhcmVuIGluIGl0cyBsb2dpY2FsCjs7 IGxpbmUgb2YgdGhlIGJ1ZmZlcgo7Owo7OyBpbmNvbnNpc3RlbnQgaXMgd2hldGhlciB0aGUgb3Bl biBwYXJlbidzIGNsb3NlIHBhcmVuIGlzIGluY29uc2lzdGVudAo7OyB3aXRoIHRoZSBpbmRlbnRh dGlvbiB3aXRoaW4gdGhlIGxpc3QgZGVmaW5lZCBieSB0aGUgcGFyZW5zLgo7Owo7OyAgIG5pbCBt ZWFucyB1bmtub3duCjs7Cjs7ICAgdCBtZWFucyBpbmNvbnNpc3RlbnQKOzsKOzsgTkI6IFRoZXJl J3Mgbm8gdmFsdWUgZm9yICJjb25zaXN0ZW50IiBiZWNhdXNlIG9uY2UgaXQgaXMga25vd24sIHRo ZQo7OyBzdHJ1Y3QgaW5zdGFuY2UgaXMgcG9wcGVkIGFuZCBubyBsb25nZXIgdXNlZC4KKGNsLWRl ZnN0cnVjdCBjb2xvci1wYXJlbnMtLU9wZW4gcG9zaXRpb24gY29sdW1uIGluY29uc2lzdGVudCkK CihkZWZzdWJzdCBjb2xvci1wYXJlbnMtLWNvbG9yaXplIChwb3NpdGlvbnMgZmFjZS1hcmcpCiAg IkNvbG9yaXplIGNoYXJzIGluIHRoZSBidWZmZXIgdG8gdGhlIHNwZWNpZmllZCBGQUNFLUFSRyB3 aXRoCkZvbnQgTG9jay4KClBPU0lUSU9OUyBpcyBhIGxpc3Qgb2YgcG9zaXRpb25zIGluIHRoZSBi dWZmZXIgdG8gY29sb3JpemUuIgogICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zCiAgICAobWFw YyAobGFtYmRhIChwb3MtaSkKICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgcG9zLWkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDErIHBvcy1pKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBgKGZvbnQtbG9jay1mYWNlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLGZhY2UtYXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVhci1ub25zdGlja3kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0KSkp CiAgICAgICAgICBwb3NpdGlvbnMpKSkKCihkZWZzdWJzdCBjb2xvci1wYXJlbnMtLWRlY29sb3Jp emUgKHBvc2l0aW9ucykKICAiRGVjb2xvcml6ZSBjaGFycyBpbiB0aGUgYnVmZmVyIGNvbG9yZWQg d2l0aCBGb250IExvY2suCgpQT1NJVElPTlMgaXMgYSBsaXN0IG9mIHBvc2l0aW9ucyBpbiB0aGUg YnVmZmVyIHRvIGNvbG9yaXplLiIKICAod2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucwogICAgKG1h cGMgKGxhbWJkYSAocG9zLWkpCiAgICAgICAgICAgIChyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIHBv cy1pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKyBwb3MtaSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhmb250LWxvY2stZmFjZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlYXItbm9uc3RpY2t5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmlsKSkpCiAgICAgICAgICBwb3NpdGlvbnMpKSkKCihkZWZzdWJzdCBjb2xvci1w YXJlbnMtLXVwZGF0ZS1pbmNvbnNpc3RlbmN5LWNvbG9ycyAoaW5jb25zaXN0ZW50cAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4tcGFyZW4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9z ZS1wYXJlbikKICAiVXBkYXRlIGluY29uc2lzdGVuY3kgRm9udCBMb2NrIGNvbG9ycyBmb3IgT1BF Ti1QQVJFTiBhbmQKQ0xPU0UtUEFSRU4gYXMgYnVmZmVyIHBvc2l0aW9ucyBiYXNlZCBvbiBJTkNP TlNJU1RFTlRQLiIKICAoaWYgaW5jb25zaXN0ZW50cAogICAgICAoY29sb3ItcGFyZW5zLS1jb2xv cml6ZSAobGlzdCBvcGVuLXBhcmVuIGNsb3NlLXBhcmVuKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnY29sb3ItcGFyZW5zLWluY29uc2lzdGVudCkKICAgIChjb2xvci1wYXJlbnMtLWRl Y29sb3JpemUgKGxpc3Qgb3Blbi1wYXJlbiBjbG9zZS1wYXJlbikpKSkKCihkZWZ1biBjb2xvci1w YXJlbnMtcHJvcGVydGl6ZS1yZWdpb24gKHN0YXJ0IGVuZCkKICAobWVzc2FnZSAiU3RhcnRpbmcg c3RhcnQ9JXMgZW5kPSVzIiBzdGFydCBlbmQpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoZ290by1j aGFyIHN0YXJ0KQogICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgKGxldCAoOzsgUHVzaCBhdCBv cGVuIHBhcmVucywgcG9wIGF0IGNsb3NlIHBhcmVucwogICAgICAgICAgKHBhcmVuLXN0YWNrKQog ICAgICAgICAgKHBhcnNlLXN0YXRlIChzeW50YXgtcHBzcykpKQogICAgICAod2hpbGUgKDwgKHBv aW50KSBlbmQpCiAgICAgICAgKGxldCAoKGxpbmUtc3RhcnQgKHBvaW50KSkKICAgICAgICAgICAg ICA7OyBDb2x1bW4gYXQgd2hpY2ggdGV4dCBzdGFydHMgb24gdGhlIGxpbmUsIGV4Y2VwdCBpZgog ICAgICAgICAgICAgIDs7IGluc2lkZSBhIHN0cmluZy4gVGV4dCBkb2Vzbid0IHN0YXJ0IGluIGEg Y29tbWVudCwKICAgICAgICAgICAgICA7OyBzaW5jZSA7IGlzIHRleHQuCiAgICAgICAgICAgICAg KHRleHQtY29sdW1uIChwcm9nbiAoYmFjay10by1pbmRlbnRhdGlvbikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWNvbHVtbikpKQogICAgICAgICAgICAgIChsaW5l LWVuZCAoc2F2ZS1leGN1cnNpb24gKGVuZC1vZi1saW5lKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHBvaW50KSkpKQogICAgICAgICAgOzsgU2tpcCB3aGl0ZXNwYWNl IG9ubHkgbGluZXMKICAgICAgICAgICh1bmxlc3MgKGVxIChwb2ludCkgbGluZS1lbmQpCiAgICAg ICAgICAgICh1bmxlc3MgKG50aCAzIHBhcnNlLXN0YXRlKSA7IFdoZXRoZXIgaW5zaWRlIHN0cmlu ZwogICAgICAgICAgICAgIDs7IE1hcmsgb3BlbiBwYXJlbnMgb24gdGhlIHBhcmVuLXN0YWNrIHRo YXQgYmVjb21lCiAgICAgICAgICAgICAgOzsgaW5jb25zaXN0ZW50IGJlY2F1c2Ugb2YgdGhlIGN1 cnJlbnQgbGluZS4KICAgICAgICAgICAgICAobGV0ICgob3Blbi1pIHBhcmVuLXN0YWNrKSkKICAg ICAgICAgICAgICAgIDs7IElmIG9uZSBjb25zaWRlcnMgb25seSB0aGUgaW5jb25zaXN0ZW50PT1u aWwgT3BlbnMgb24KICAgICAgICAgICAgICAgIDs7IHRoZSBwYXJlbi1zdGFjaywgdGhlaXIgY29s dW1ucyBhcmUgc3RyaWN0bHkKICAgICAgICAgICAgICAgIDs7IGRlY3JlYXNpbmcgbW92aW5nIGRv d24gdGhlIHN0YWNrICh0b3dhcmRzIHRoZSB0YWlsKS4KICAgICAgICAgICAgICAgIDs7IFNpbmNl IHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBtYXJraW5nIE9wZW5zCiAgICAgICAgICAgICAgICA7 OyBpbmNvbnNpc3RlbnQsIHRoYXQgYWxsb3dzIHRoZSBpdGVyYXRpb24gdG8gc3RvcCBhdAogICAg ICAgICAgICAgICAgOzsgdGhlIGZpcnN0IGluY29uc2lzdGVudD1uaWwgT3BlbiB3aXRoIHNtYWxs IGVub3VnaAogICAgICAgICAgICAgICAgOzsgY29sdW1uLgogICAgICAgICAgICAgICAgKHdoaWxl IChhbmQgb3Blbi1pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKDw9IHRleHQtY29s dW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci1wYXJlbnMtLU9w ZW4tY29sdW1uIChjYXIgb3Blbi1pKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbG9yLXBhcmVucy0tT3Blbi1pbmNvbnNpc3RlbnQgKGNhciBvcGVuLWkpKSkpCiAgICAgICAg ICAgICAgICAgIChzZXRmIChjb2xvci1wYXJlbnMtLU9wZW4taW5jb25zaXN0ZW50IChjYXIgb3Bl bi1pKSkKICAgICAgICAgICAgICAgICAgICAgICAgdCkKICAgICAgICAgICAgICAgICAgKHNldHEg b3Blbi1pIChjZHIgb3Blbi1pKSkpKSkKICAgICAgICAgICAgOzsgTm90ZTogcG9pbnQgaXMgYXQg aW5kZW50YXRpb24KICAgICAgICAgICAgKHdoaWxlIChhbmQgKDwgKHBvaW50KSBsaW5lLWVuZCkp CiAgICAgICAgICAgICAgKGxldCAoKGRlcHRoLWNoYW5nZQogICAgICAgICAgICAgICAgICAgICAo LSAoY2FyIHBhcnNlLXN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAoY2FyIChzZXRxIHBh cnNlLXN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgVE9ETzogV2ls bCBpdCBwZXJmb3JtIGJldHRlciBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7OyBwYXJzaW5nIDEgY2hhciBhdCBhIHRpbWU/CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBhcnNlLXBhcnRpYWwtc2V4cCAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSsgKHBvaW50KSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS1z dGF0ZSkpKSkpKQogICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAoKG9yICg9 IDAgZGVwdGgtY2hhbmdlKSAgIDsgRGlkbid0IGNyb3NzIGEgcGFyZW4KICAgICAgICAgICAgICAg ICAgICAgIChudGggMyBwYXJzZS1zdGF0ZSkgIDsgSW5zaWRlIGEgc3RyaW5nCiAgICAgICAgICAg ICAgICAgICAgICAobnRoIDQgcGFyc2Utc3RhdGUpKSA7IEluc2lkZSBhIGNvbW1lbnQKICAgICAg ICAgICAgICAgICAgbmlsKSA7IEtlZXAgcGFyc2luZwogICAgICAgICAgICAgICAgIDs7IENhc2U6 IHN0b3BwZWQgYXQgb3BlbiBwYXJlbgogICAgICAgICAgICAgICAgICgoPCBkZXB0aC1jaGFuZ2Ug MCkKICAgICAgICAgICAgICAgICAgOzsgUHVzaAogICAgICAgICAgICAgICAgICAoc2V0cSBwYXJl bi1zdGFjawogICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAobWFrZS1jb2xvci1wYXJlbnMt LU9wZW4gOnBvc2l0aW9uICgxLSAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNvbHVtbiB0ZXh0LWNvbHVtbikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFyZW4tc3RhY2spKQogICAgICAgICAgICAgICAgICAobWVz c2FnZSAiUHVzaGVkOiAlcyIgKGNhciBwYXJlbi1zdGFjaykpKQogICAgICAgICAgICAgICAgIDs7 IENhc2U6IHN0b3BwZWQgYXQgY2xvc2UgcGFyZW4KICAgICAgICAgICAgICAgICAoKDwgMCBkZXB0 aC1jaGFuZ2UpCiAgICAgICAgICAgICAgICAgIChpZiBwYXJlbi1zdGFjawogICAgICAgICAgICAg ICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci1wYXJlbnMtLXVw ZGF0ZS1pbmNvbnNpc3RlbmN5LWNvbG9ycwogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9y LXBhcmVucy0tT3Blbi1pbmNvbnNpc3RlbnQgKGNhciBwYXJlbi1zdGFjaykpCiAgICAgICAgICAg ICAgICAgICAgICAgICAoY29sb3ItcGFyZW5zLS1PcGVuLXBvc2l0aW9uIChjYXIgcGFyZW4tc3Rh Y2spKQogICAgICAgICAgICAgICAgICAgICAgICAgKDEtIChwb2ludCkpKQogICAgICAgICAgICAg ICAgICAgICAgICA7OyBQb3AKICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIlBvcHBp bmc6ICVzIiAoY2FyIHBhcmVuLXN0YWNrKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEg cGFyZW4tc3RhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciBwYXJlbi1zdGFj aykpKQogICAgICAgICAgICAgICAgICAgIDs7IFRPRE86IEhhbmRsZSBjbG9zZSBwYXJlbiB3aGVu IG5pbCBwYXJlbi1zdGFjawogICAgICAgICAgICAgICAgICAgICkpKSkpKQogICAgICAgICAgOzsg R28gZm9yd2FyZCB0byBiZWdpbm5pbmcgb2YgbmV4dCBsaW5lLCBrZWVwaW5nIHBhcnNlLXN0YXRl CiAgICAgICAgICA7OyB1cCB0byBkYXRlCiAgICAgICAgICAodW5sZXNzIChlb2JwKQogICAgICAg ICAgICAoc2V0cSBwYXJzZS1zdGF0ZQogICAgICAgICAgICAgICAgICAocGFyc2UtcGFydGlhbC1z ZXhwIChwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSsgKHBv aW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXJzZS1zdGF0ZSkpKSkpKSkpCgooZGVmdW4gY29sb3ItcGFyZW5zLXVu cHJvcGVydGl6ZS1yZWdpb24gKHN0YXJ0IGVuZCkKICA7OyBUT0RPOiByZW1vdmUtdGV4dC1wcm9w ZXJ0aWVzCiAgKQoKKGRlZnVuIGNvbG9yLXBhcmVucy1leHRlbmQtcmVnaW9uICgpCiAgIkV4dGVu ZCByZWdpb24gZm9yIEpJVCBsb2NrIHRvIGZvbnRpZnkuIgogIChtZXNzYWdlICJERUJVRzogU3Rh cnQgY29sb3ItcGFyZW5zLWV4dGVuZC1yZWdpb24gZm9udC1sb2NrLWJlZz0lcyBmb250LWxvY2st ZW5kPSVzIiBmb250LWxvY2stYmVnIGZvbnQtbG9jay1lbmQpIAogIChzYXZlLWV4Y3Vyc2lvbgog ICAgKGxldCAoKHRvcC1sZXZlbCAoc3ludGF4LXBwc3MtdG9wbGV2ZWwtcG9zIChzeW50YXgtcHBz cyBmb250LWxvY2stYmVnKSkpKQogICAgICAod2hlbiB0b3AtbGV2ZWwKICAgICAgICAoc2V0cSBm b250LWxvY2stYmVnIChtaW4gZm9udC1sb2NrLWJlZyB0b3AtbGV2ZWwpKQogICAgICAgIChnb3Rv LWNoYXIgdG9wLWxldmVsKQogICAgICAgIChzZXRxIGZvbnQtbG9jay1lbmQgKG1heCBmb250LWxv Y2stZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChzY2FuLWxpc3RzIChw b2ludCkgMSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQtbWF4 KSkpKSkpKQogIChtZXNzYWdlICJjb2xvci1wYXJlbnMtZXh0ZW5kLXJlZ2lvbiBmb250LWxvY2st YmVnPSVzIGZvbnQtbG9jay1lbmQ9JXMiIGZvbnQtbG9jay1iZWcgZm9udC1sb2NrLWVuZCkpCgoo ZGVmaW5lLW1pbm9yLW1vZGUgY29sb3ItcGFyZW5zLW1vZGUKICAiQ29sb3IgdW5iYWxhbmNlZCBw YXJlbnRoZXNlcyBhbmQgcGFyZW50aGVzZXMgaW5jb25zaXN0ZW50IHdpdGgKICBpbmRlbnRhdGlv bi4iCiAgbmlsIG5pbCBuaWwKICAoaWYgY29sb3ItcGFyZW5zLW1vZGUKICAgICAgKHByb2duCiAg ICAgICAgKGppdC1sb2NrLXJlZ2lzdGVyICdjb2xvci1wYXJlbnMtcHJvcGVydGl6ZS1yZWdpb24g dCkKICAgICAgICAoYWRkLWhvb2sgJ2ZvbnQtbG9jay1leHRlbmQtcmVnaW9uLWZ1bmN0aW9ucwog ICAgICAgICAgICAgICAgICAnY29sb3ItcGFyZW5zLWV4dGVuZC1yZWdpb24KICAgICAgICAgICAg ICAgICAgbmlsCiAgICAgICAgICAgICAgICAgIHQpKQogICAgKGppdC1sb2NrLXVucmVnaXN0ZXIg J2NvbG9yLXBhcmVucy1wcm9wZXJ0aXplLXJlZ2lvbikKICAgIChjb2xvci1wYXJlbnMtdW5wcm9w ZXJ0aXplLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQoKKHByb3ZpZGUgJ2NvbG9y LXBhcmVucykKCjs7OyBjb2xvci1wYXJlbnMuZWwgZW5kcyBoZXJlCg== --001a11348500c7d53004eb3b644a Content-Type: text/x-emacs-lisp; charset=US-ASCII; name="thread-test-binding.el" Content-Disposition: attachment; filename="thread-test-binding.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ho1rh1c31 OzsgVGhpcyBidWZmZXIgaXMgZm9yIG5vdGVzIHlvdSBkb24ndCB3YW50IHRvIHNhdmUsIGFuZCBm b3IgTGlzcCBldmFsdWF0aW9uLgo7OyBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBmaWxlLCB2aXNp dCB0aGF0IGZpbGUgd2l0aCBDLXggQy1mLAo7OyB0aGVuIGVudGVyIHRoZSB0ZXh0IGluIHRoYXQg ZmlsZSdzIG93biBidWZmZXIuCgogICAoc2V0cSBkZWJ1Zy1vbi1lcnJvciB0KQogICAoZGVmdmFy IHRocmVhZHMtdGVzdC1iaW5kaW5nIG5pbCkKCiAgIChkZWZ1biB0aHJlYWRzLXRlc3QtdGhyZWFk MiAoKQogICAgIChsZXQgKCh0aHJlYWRzLXRlc3QtYmluZGluZyAyMykpCiAgICh0aHJlYWQteWll bGQpKQogICAgIChzZXRxIHRocmVhZHMtdGVzdC1nbG9iYWwgMjMpKQoKICAgKHByb2duCiAgICAg KHNldHEgdGhyZWFkcy10ZXN0LWdsb2JhbCBuaWwpCiAgICAgKG1ha2UtdGhyZWFkICMndGhyZWFk cy10ZXN0LXRocmVhZDIpCiAgICAgKHdoaWxlIChub3QgdGhyZWFkcy10ZXN0LWdsb2JhbCkKICAg KHRocmVhZC15aWVsZCkpCiAgICAgKGFuZCAobm90IHRocmVhZHMtdGVzdC1iaW5kaW5nKQogICAg ICAgICAgdGhyZWFkcy10ZXN0LWdsb2JhbCkpCgoK --001a11348500c7d53004eb3b644a--