From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: MPS: composition Date: Sun, 28 Apr 2024 17:03:59 +0300 Message-ID: <86bk5ttwhc.fsf@gnu.org> References: <87le4xaai7.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21907"; mail-complaints-to="usenet@ciao.gmane.io" Cc: gerd.moellmann@gmail.com, emacs-devel@gnu.org To: Helmut Eller Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Apr 28 16:04:54 2024 Return-path: Envelope-to: ged-emacs-devel@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 1s159B-0005RZ-VB for ged-emacs-devel@m.gmane-mx.org; Sun, 28 Apr 2024 16:04:54 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s158P-0008HG-Gf; Sun, 28 Apr 2024 10:04:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s158N-0008Gw-Uc for emacs-devel@gnu.org; Sun, 28 Apr 2024 10:04:04 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s158N-0001KG-GO; Sun, 28 Apr 2024 10:04:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=UNOo4Ttz7ahVlKndx3N6qbRbj37CgM3j8aZtf2T3kuQ=; b=iUCsyqCdKL9t0npZDl7Q Qtsuj+y4dvwgcNpgvuTlj/Csej6Zh7hj6CeamM9ZiTpcgZz2BisEleMIGbkyZDWkKo0PINXr15jvz mqFKeA5rPnL9KrxptTW26pUcggR1n3KuJg6Kb3oSYPQFSwt84KppFfhnJxVHVsljkArcBFMM2ehxv oZBONx9FqiBATYDpu1PhkMUyI2CxhvVovlXpYNpl9U9/uddGJKVpM14/KPjwQvB9JhIMLj8Rz1oEb IqXWaokDNzSY/iFkSsjsvfNXEXewReaaOQxkvsJ94j6ywj8uePZT/ZOhSWsdNSvL6XuMcciv5OCaQ qGUmUlQllBiM5g==; In-Reply-To: <87le4xaai7.fsf@gmail.com> (message from Helmut Eller on Sun, 28 Apr 2024 15:21:20 +0200) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:318289 Archived-At: > From: Helmut Eller > Cc: Eli Zaretskii , emacs-devel > Date: Sun, 28 Apr 2024 15:21:20 +0200 > > On Sun, Apr 28 2024, Gerd Möllmann wrote: > > > AFAICS, all struct compositions (malloc'd) are kept in composition_table > > (composite.c), so we could > > > > - alloc struct composition from MPS > > - add a fix_compositon > > - make composition_table an exact root > > > > I think that would be nicest approach. WDYT? > > It's the nicest approach. But it's a lot of code just for this one key > field. Does this key really have to be a Lisp_Object can't it be > something simple like an integer? The key is constructed from the composition data itself, which comes from Lisp: if (FIXNUMP (components)) key = make_vector (1, components); else if (STRINGP (components) || CONSP (components)) key = Fvconcat (1, &components); else if (VECTORP (components)) key = components; else if (NILP (components)) { key = make_uninit_vector (nchars); if (STRINGP (string)) for (ptrdiff_t i = 0; i < nchars; i++) { ch = fetch_string_char_advance (string, &charpos, &bytepos); ASET (key, i, make_fixnum (ch)); } else for (ptrdiff_t i = 0; i < nchars; i++) { ch = fetch_char_advance (&charpos, &bytepos); ASET (key, i, make_fixnum (ch)); } } Replacing that with an integer would be somewhat tricky. The requirement here is that if any part of the composition changes, the key should be different, or else the results of the composition will not follow the changes.