From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.help Subject: Re: "fall-through" generic function args plus &context Date: Wed, 28 Dec 2016 18:30:37 -0800 Message-ID: <8760m3a2lu.fsf@ericabrahamsen.net> References: <87r34u8m55.fsf@ericabrahamsen.net> <87d1gexq6v.fsf@ericabrahamsen.net> <87y3z1z3pg.fsf@ericabrahamsen.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1483018372 15899 195.159.176.226 (29 Dec 2016 13:32:52 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 29 Dec 2016 13:32:52 +0000 (UTC) User-Agent: Gnus/5.130014 (Ma Gnus v0.14) Emacs/26.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Dec 29 14:32:47 2016 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMap0-0002kU-Pb for geh-help-gnu-emacs@m.gmane.org; Thu, 29 Dec 2016 14:32:42 +0100 Original-Received: from localhost ([::1]:35645 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cMap3-0007jY-NU for geh-help-gnu-emacs@m.gmane.org; Thu, 29 Dec 2016 08:32:45 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:50153) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cMQUg-0008Es-Ra for help-gnu-emacs@gnu.org; Wed, 28 Dec 2016 21:31:03 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cMQUd-0008SZ-OK for help-gnu-emacs@gnu.org; Wed, 28 Dec 2016 21:31:02 -0500 Original-Received: from [195.159.176.226] (port=50961 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cMQUd-0008S5-Hg for help-gnu-emacs@gnu.org; Wed, 28 Dec 2016 21:30:59 -0500 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1cMQUR-0001ii-OX for help-gnu-emacs@gnu.org; Thu, 29 Dec 2016 03:30:47 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 46 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:1eq3hjRwOZWTqP+NRIoUU3WgOT8= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-Mailman-Approved-At: Thu, 29 Dec 2016 08:32:07 -0500 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.org gmane.emacs.help:112019 Archived-At: Stefan Monnier writes: >>> But currently cl-generic does not support this notion of "generic >>> function" quite the way CLOS does (for one our "generic functions" >>> objects are `defstruct` rather than `defclass` objects, and also >>> they're not callable so the function cell is yet different (a fairly >>> standard closure)). > >> Thanks for the tips! Using fundamental-mode didn't work (at least not in >> the emacs-lisp buffer I tested it in), > > Hmm... indeed we don't register fundamental-mode as a parent for > some reason. I think either (&context (major-mode nil)) or (&context > (major-mode fundamental-mode)) or both should work. Perhaps fundamental-mode should work, but I intuitively tried (&context (major-mode nil)) and (&context (major-mode t)). Also, so far as I can tell, the correct function signature for the defgeneric should be (&context (major-mode t)), is that correct? At least, that didn't raise any errors. >> but the empty arg-list did, so that's sorted. > > That's the better choice anyway (it's marginally more efficient). > >> I haven't looked too hard at the specializer code, but if we can already >> dispatch on defstructs, it seems like it wouldn't be that hard to make >> something that dispatches on generics? > > Yes, it shouldn't be too hard, but it still requires offering the > possibility to use a "child defstruct" for a given generic function > (currently, all generic function objects are deftruct of the same type, > so there's not much dispatch to do). > IOW implement the :generic-function-class arg to `cl-defgeneric` as well > as well as exposing the `cl--generic` type (i.e. renaming it) so users > can define child defstructs. I get it in theory, but don't understand specializers well enough to know where to start. One of my projects for the next year is learning generic functions better, so let's see if I get to it before anyone else does. Thanks, Eric