From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#8415: 23.3.50; Extensible Emacs Registers Date: Fri, 08 Apr 2011 22:25:02 -0300 Message-ID: References: <4D9A45CD.4030808@gmail.com> <4D9A7537.5030005@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1302313067 9801 80.91.229.12 (9 Apr 2011 01:37:47 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sat, 9 Apr 2011 01:37:47 +0000 (UTC) Cc: bug-gnu-emacs@gnu.org To: Leo Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Apr 09 03:37:43 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Q8N7O-0005uO-Vz for geb-bug-gnu-emacs@m.gmane.org; Sat, 09 Apr 2011 03:37:43 +0200 Original-Received: from localhost ([127.0.0.1]:50538 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q8N7K-0007gs-Jv for geb-bug-gnu-emacs@m.gmane.org; Fri, 08 Apr 2011 21:37:38 -0400 Original-Received: from [140.186.70.92] (port=47269 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q8N74-0007fl-4w for bug-gnu-emacs@gnu.org; Fri, 08 Apr 2011 21:37:26 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q8N72-0005Xr-Uh for bug-gnu-emacs@gnu.org; Fri, 08 Apr 2011 21:37:22 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:39424) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q8N72-0005Xl-PC for bug-gnu-emacs@gnu.org; Fri, 08 Apr 2011 21:37:20 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1Q8Mw6-0001rh-6m; Fri, 08 Apr 2011 21:26:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 09 Apr 2011 01:26:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 8415 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by submit@debbugs.gnu.org id=B.13023123187120 (code B ref -1); Sat, 09 Apr 2011 01:26:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 9 Apr 2011 01:25:18 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q8MvO-0001qm-0N for submit@debbugs.gnu.org; Fri, 08 Apr 2011 21:25:18 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q8MvL-0001qa-Nz for submit@debbugs.gnu.org; Fri, 08 Apr 2011 21:25:16 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q8MvF-0003Pc-VG for submit@debbugs.gnu.org; Fri, 08 Apr 2011 21:25:10 -0400 Original-Received: from lists.gnu.org ([199.232.76.165]:60599) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q8MvF-0003PT-Sp for submit@debbugs.gnu.org; Fri, 08 Apr 2011 21:25:09 -0400 Original-Received: from [140.186.70.92] (port=58267 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q8MvE-0001DT-VL for bug-gnu-emacs@gnu.org; Fri, 08 Apr 2011 21:25:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q8MvC-0003ON-Mt for bug-gnu-emacs@gnu.org; Fri, 08 Apr 2011 21:25:08 -0400 Original-Received: from fencepost.gnu.org ([140.186.70.10]:33269) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q8MvC-0003O9-CY for bug-gnu-emacs@gnu.org; Fri, 08 Apr 2011 21:25:06 -0400 Original-Received: from 213-159-126-200.fibertel.com.ar ([200.126.159.213]:56038 helo=ceviche.home) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1Q8MvB-0005qW-UM; Fri, 08 Apr 2011 21:25:06 -0400 Original-Received: by ceviche.home (Postfix, from userid 20848) id F2405660B0; Fri, 8 Apr 2011 21:25:02 -0400 (EDT) In-Reply-To: (Leo's message of "Thu, 07 Apr 2011 11:13:49 +0800") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Fri, 08 Apr 2011 21:26:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.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: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:45704 Archived-At: >> I think that's a better approach, yes (tho I'd pass the register object >> to the functions, so instead of: >> >> (let* ((object (register-get register)) >> (val (if (register-p object) >> (register-info object) >> object)) >> (jump (and (register-p object) >> (register-jump-func object)))) >> (cond >> (jump (funcall jump val)) >> >> you just have >> >> (let* ((object (register-get register)) >> (jump (and (register-p object) >> (register-jump-func object)))) >> (cond >> (jump (funcall jump object)) >> >> or >> >> (let* ((object (register-get register))) >> (cond >> ((register-p object) (funcall (or (register-jump-func object) >> (error "Don't know how to jump")) >> object)) > I am lost here. VAL is needed in the rest of the function, the old code. > So you can't just omit it. In the rest of the function register-p is false, so `val' = `object'. >>> 1. all existing register-creating commands need to use the new >>> implementation, so the patch won't be any smaller. >> That's for subsequent patches. > The intention is to have a clean uniform extensible internal > representation of registers so subsequent patches are completely trivial > which I opted to omit for now so that people can focus on more important > changes. Somehow that didn't work out well. The patches will be just as clean with the other approach. Try it. >>> 2. needs explicitly creating a register-value struct i.e. >>> (register-set ?a (register-value-make ....)). >> I see that as a feature. > If register-value-make is not used, 'typecase polymorphism' has to be > used. If we were to eliminate 'typecase polymorphism', > register-value-make is required. `typecase polymorphism' is what we have, and after the addition I suggest we can remove it little by little. > It just has selectors and three public function register-make, > register-find, register-map. The rest of code can just build on top of > them. With the alist representation, register-find and register-map aren't even needed. Stefan