From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.help Subject: Re: "fall-through" generic function args plus &context Date: Tue, 27 Dec 2016 16:30:19 -0500 Message-ID: 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 1482904902 11616 195.159.176.226 (28 Dec 2016 06:01:42 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 28 Dec 2016 06:01:42 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.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 Wed Dec 28 07:01:38 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 1cM7Iv-0002J7-QQ for geh-help-gnu-emacs@m.gmane.org; Wed, 28 Dec 2016 07:01:37 +0100 Original-Received: from localhost ([::1]:57833 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cM7J0-0007gK-Lk for geh-help-gnu-emacs@m.gmane.org; Wed, 28 Dec 2016 01:01:42 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60189) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cLzKY-0000nQ-Cn for help-gnu-emacs@gnu.org; Tue, 27 Dec 2016 16:30:47 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cLzKV-0001KG-9S for help-gnu-emacs@gnu.org; Tue, 27 Dec 2016 16:30:46 -0500 Original-Received: from [195.159.176.226] (port=33762 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cLzKV-0001K1-1t for help-gnu-emacs@gnu.org; Tue, 27 Dec 2016 16:30:43 -0500 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1cLzKE-0004kP-QY for help-gnu-emacs@gnu.org; Tue, 27 Dec 2016 22:30:26 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 31 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:v2Jty6b5W/nE5tYfFHsLx5uwQoM= 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: Wed, 28 Dec 2016 01:00:47 -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:112015 Archived-At: >> 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. > 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. Stefan