From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "Thompson, David" Newsgroups: gmane.lisp.guile.bugs Subject: bug#46175: Redefinable classes clobber custom slot options Date: Fri, 29 Jan 2021 11:43:35 -0500 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000354c2405ba0cb514" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10932"; mail-complaints-to="usenet@ciao.gmane.io" To: 46175@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Fri Jan 29 17:44:22 2021 Return-path: Envelope-to: guile-bugs@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 1l5Wsg-0002jo-Ck for guile-bugs@m.gmane-mx.org; Fri, 29 Jan 2021 17:44:22 +0100 Original-Received: from localhost ([::1]:59156 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l5Wsf-0006O5-AO for guile-bugs@m.gmane-mx.org; Fri, 29 Jan 2021 11:44:21 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40866) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l5WsM-0006Nl-Uh for bug-guile@gnu.org; Fri, 29 Jan 2021 11:44:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:41302) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l5WsM-0004JV-N9 for bug-guile@gnu.org; Fri, 29 Jan 2021 11:44:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1l5WsM-0000rK-KE for bug-guile@gnu.org; Fri, 29 Jan 2021 11:44:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: "Thompson, David" Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Fri, 29 Jan 2021 16:44:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 46175 X-GNU-PR-Package: guile X-Debbugs-Original-To: bug-guile@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16119386343280 (code B ref -1); Fri, 29 Jan 2021 16:44:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 29 Jan 2021 16:43:54 +0000 Original-Received: from localhost ([127.0.0.1]:52848 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1l5WsD-0000qm-EB for submit@debbugs.gnu.org; Fri, 29 Jan 2021 11:43:54 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:53306) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1l5WsA-0000qd-AS for submit@debbugs.gnu.org; Fri, 29 Jan 2021 11:43:52 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40788) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l5Ws9-0006Ml-Qw for bug-guile@gnu.org; Fri, 29 Jan 2021 11:43:50 -0500 Original-Received: from mail-vs1-xe2e.google.com ([2607:f8b0:4864:20::e2e]:33381) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l5Ws7-00048f-LI for bug-guile@gnu.org; Fri, 29 Jan 2021 11:43:49 -0500 Original-Received: by mail-vs1-xe2e.google.com with SMTP id e15so5181263vsa.0 for ; Fri, 29 Jan 2021 08:43:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=worcester-edu.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=rFWaf5Et2LnXm7Vp1WU+TahUQQYgPGCbDlzjbRMuqCY=; b=sWsP/5BKz2vFisb2ynrLj2d7YwciRtNfxRNL332eL++KA9ezK+v23BBAdpiHTOvlwa XR4fkZMHn/izmcLB6+wtxDM4bH2aKJVpBAW0lx6J+vgF/nbQoUt7q6Q1bN5ECecvRrWp Zhrt6ahioBNowc0EPo8OlPnulixPmUEHGjXILFhdmjUrzCndEtwyugY27haOijyTOH98 9PmqivlSsi/SnsD0jhzncOcfYPaGOvdGcyZrN//uvbJPVD+D6Y7dDz/+2GB/d10pt7k+ qtwv7Bc/16Afp3vvYodmDdvHhwpz7SfY+HrNSelcsbCFN5TXWS1hwl6iGEVaCWIQb9JE qnbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=rFWaf5Et2LnXm7Vp1WU+TahUQQYgPGCbDlzjbRMuqCY=; b=IrnEXhfSyX6yKTiXmuIKk7l/ccV8FgynmQWbxiwawRotf+UOsYY5ptzUcRze5g/Swh rKdRFF7m9iaPtjS9jY3ILoFF7ca3zUARmQEFvQHPEU5E008sNtC3rHtDPfP/QqoevrY1 iJALa0ygH05ih0aoZVG0YxOm7eb0EYeWbK72x0uuYM9zQUVu5o3P9DUTCWKy3o+3RAXx i/y2HGgms8R7gruDSf/qOb9tdGE+mA141YhLFeC1X2jjvcq5psZlFnocpFGYEAfDN3tQ lKOof6UXaLtV7QEi9atXGzKUjuFElD0+obS7B8ty2pjlYjTU2XLziWtXUv73MfGtl1un Ejkg== X-Gm-Message-State: AOAM530qyeR2NqPFysEvvWcyvWzWOuhXqbmin0e975QPTGYHUOQoz0bd TIQHboGbn63/jZq/0NRFtlOkC+YSKlygvxxrMNaDdXPZ7xM/bw== X-Google-Smtp-Source: ABdhPJxEWVPqoP3mUUC0qyntXM8bLSg/7LJ19geqvA27aSJ5k8TjZasJhEwIhLGK5E6JjkzI+amkc1tWxNHO6Pk4GY4= X-Received: by 2002:a67:6b46:: with SMTP id g67mr2957892vsc.60.1611938626053; Fri, 29 Jan 2021 08:43:46 -0800 (PST) Received-SPF: pass client-ip=2607:f8b0:4864:20::e2e; envelope-from=dthompson2@worcester.edu; helo=mail-vs1-xe2e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.io gmane.lisp.guile.bugs:9970 Archived-At: --000000000000354c2405ba0cb514 Content-Type: text/plain; charset="UTF-8" The compute-slots method for does a transformation of #:allocation #:instance slots to #:allocation #:virtual slots, but in doing so it discards all slot options besides the standard ones. This means that a metaclass that inherits from won't work as expected if it relies upon custom slot options. Test case: (use-modules (oop goops) (srfi srfi-111)) (define-class ()) (define (boxed-slot? slot) (get-keyword #:box? (slot-definition-options slot))) (define-method (compute-getter-method (class ) slot) (if (boxed-slot? slot) (make #:specializers (list class) #:procedure (let ((slot-name (slot-definition-name slot))) (lambda (obj) (unbox (slot-ref obj slot-name))))) (next-method))) (define-method (compute-setter-method (class ) slot) (if (boxed-slot? slot) (make #:specializers (list class ) #:procedure (let ((slot-name (slot-definition-name slot))) (lambda (obj value) (set-box! (slot-ref obj slot-name) value)))) (next-method))) (define-class ( )) (define-class () (bar #:accessor bar #:box? #t #:init-form (box 123)) #:metaclass ) (define-class () (bar #:accessor bar #:box? #t #:init-form (box 123)) #:metaclass ) ;; This works: (pk (+ (bar (make )) 456)) ;; This throws an error: (pk (+ (bar (make )) 456)) Attached is a patch that preserves all slot options that redefinable classes do not need to alter, including custom ones. How does it look? - Dave --000000000000354c2405ba0cb514 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-goops-Preserve-all-slot-options-in-redefinable-class.patch" Content-Disposition: attachment; filename="0001-goops-Preserve-all-slot-options-in-redefinable-class.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kkiijzsf0 RnJvbSBjYmM0MzQ1Mjc5MzgxODIzODllYmU3MmMyNTg1ODdkMTM3YTg1ODkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBUaG9tcHNvbiA8ZHRob21wc29uQHZpc3RhaGlnaGVy bGVhcm5pbmcuY29tPgpEYXRlOiBGcmksIDI5IEphbiAyMDIxIDExOjA0OjU2IC0wNTAwClN1Ympl Y3Q6IFtQQVRDSF0gZ29vcHM6IFByZXNlcnZlIGFsbCBzbG90IG9wdGlvbnMgaW4gcmVkZWZpbmFi bGUgY2xhc3Nlcy4KCiogbW9kdWxlL2dvb3BzLnNjbSAoY29tcHV0ZS1zbG90cyk6IEZpeCA8cmVk ZWZpbmFibGUtY2xhc3M+IHNsb3QKICB0cmFuc2Zvcm1hdGlvbi4KLS0tCiBtb2R1bGUvb29wL2dv b3BzLnNjbSB8IDE2ICsrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlv bnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbW9kdWxlL29vcC9nb29wcy5zY20g Yi9tb2R1bGUvb29wL2dvb3BzLnNjbQppbmRleCBkZjZkZjRmN2IuLmE4MGJlNmE3YSAxMDA2NDQK LS0tIGEvbW9kdWxlL29vcC9nb29wcy5zY20KKysrIGIvbW9kdWxlL29vcC9nb29wcy5zY20KQEAg LTMwODEsMTggKzMwODEsMjAgQEAgdmFye2luaXRhcmdzfS4iCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2xvdC1kZWZpbml0aW9uLW5hbWUgcykpKQogICAgICAg ICAgICAgICAgKHJlZiAoc2xvdC1kZWZpbml0aW9uLXNsb3QtcmVmL3JhdyBzKikpCiAgICAgICAg ICAgICAgICAoc2V0ISAoc2xvdC1kZWZpbml0aW9uLXNsb3Qtc2V0ISBzKikpKQotICAgICAgICAg IChtYWtlIChjbGFzcy1vZiBzKSAjOm5hbWUgKHNsb3QtZGVmaW5pdGlvbi1uYW1lIHMpCi0gICAg ICAgICAgICAgICAgIzpnZXR0ZXIgKHNsb3QtZGVmaW5pdGlvbi1nZXR0ZXIgcykKLSAgICAgICAg ICAgICAgICAjOnNldHRlciAoc2xvdC1kZWZpbml0aW9uLXNldHRlciBzKQotICAgICAgICAgICAg ICAgICM6YWNjZXNzb3IgKHNsb3QtZGVmaW5pdGlvbi1hY2Nlc3NvciBzKQotICAgICAgICAgICAg ICAgICM6aW5pdC1rZXl3b3JkIChzbG90LWRlZmluaXRpb24taW5pdC1rZXl3b3JkIHMpCi0gICAg ICAgICAgICAgICAgIzppbml0LXRodW5rIChzbG90LWRlZmluaXRpb24taW5pdC10aHVuayBzKQor ICAgICAgICAgIChhcHBseSBtYWtlIChjbGFzcy1vZiBzKQogICAgICAgICAgICAgICAgICM6YWxs b2NhdGlvbiAjOnZpcnR1YWwKICAgICAgICAgICAgICAgICA7OyBUT0RPOiBNYWtlIGZhc3Rlci4K ICAgICAgICAgICAgICAgICAjOnNsb3QtcmVmIChsYW1iZGEgKG8pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyZWYgKHNsb3QtcmVmIG8gJ2luZGlyZWN0LXNsb3RzKSkpCiAgICAgICAg ICAgICAgICAgIzpzbG90LXNldCEgKGxhbWJkYSAobyB2KQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHNldCEgKHNsb3QtcmVmIG8gJ2luZGlyZWN0LXNsb3RzKSB2KSkpKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzZXQhIChzbG90LXJlZiBvICdpbmRpcmVjdC1zbG90 cykgdikpCisgICAgICAgICAgICAgICAgKGxldCBsb29wICgob3B0aW9ucyAoc2xvdC1kZWZpbml0 aW9uLW9wdGlvbnMgcykpKQorICAgICAgICAgICAgICAgICAgKG1hdGNoIG9wdGlvbnMKKyAgICAg ICAgICAgICAgICAgICAgKCgpICcoKSkKKyAgICAgICAgICAgICAgICAgICAgKCgob3IgIzphbGxv Y2F0aW9uICM6c2xvdC1yZWYgIzpzbG90LXNldCEpIF8gLiByZXN0KQorICAgICAgICAgICAgICAg ICAgICAgKGxvb3AgcmVzdCkpCisgICAgICAgICAgICAgICAgICAgICgoa3cgYXJnIC4gcmVzdCkK KyAgICAgICAgICAgICAgICAgICAgIChjb25zKiBrdyBhcmcgKGxvb3AgcmVzdCkpKSkpKSkpCiAg ICAgICAgKGVsc2UgcykpKQogICAgICh1bmxlc3MgKGVxdWFsPyAobGlzdC1oZWFkIHNsb3RzIChs ZW5ndGggc3RhdGljLXNsb3RzKSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljLXNsb3RzKQot LSAKMi4yNS4xCgo= --000000000000354c2405ba0cb514--