Received: (at submit) by debbugs.gnu.org; 24 Jan 2019 01:20:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jan 23 20:20:03 2019 Received: from localhost ([127.0.0.1]:43180 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1gmTgZ-0002DQ-Eq for submit <at> debbugs.gnu.org; Wed, 23 Jan 2019 20:20:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55736) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <david@HIDDEN>) id 1gmTgW-0002Cs-Sl for submit <at> debbugs.gnu.org; Wed, 23 Jan 2019 20:20:01 -0500 Received: from lists.gnu.org ([209.51.188.17]:41306) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from <david@HIDDEN>) id 1gmTgR-0006i0-KB for submit <at> debbugs.gnu.org; Wed, 23 Jan 2019 20:19:55 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37681) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <david@HIDDEN>) id 1gmTgM-0006zK-V8 for bug-guile@HIDDEN; Wed, 23 Jan 2019 20:19:54 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=BAYES_50,RCVD_IN_DNSWL_LOW autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <david@HIDDEN>) id 1gmTgM-0006fI-7A for bug-guile@HIDDEN; Wed, 23 Jan 2019 20:19:50 -0500 Received: from maximusconfessor.all2all.org ([79.99.200.102]:53366) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from <david@HIDDEN>) id 1gmTgL-0006d4-Sd; Wed, 23 Jan 2019 20:19:50 -0500 Received: from localhost (localhost [127.0.0.1]) by maximusconfessor.all2all.org (Postfix) with ESMTP id 00D3B1BE00E6; Thu, 24 Jan 2019 02:19:47 +0100 (CET) Received: from maximusconfessor.all2all.org ([127.0.0.1]) by localhost (maximusconfessor.all2all.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MNstDJac7BCz; Thu, 24 Jan 2019 02:19:46 +0100 (CET) Received: from capac (unknown [177.98.10.100]) by maximusconfessor.all2all.org (Postfix) with ESMTPSA id C6ADE1BE00E0; Thu, 24 Jan 2019 02:19:45 +0100 (CET) Date: Wed, 23 Jan 2019 23:19:39 -0200 From: David Pirotte <david@HIDDEN> To: <bug-guile@HIDDEN>, guile-devel <guile-devel@HIDDEN> Subject: GOOPS - metaclass with extra-slots made trying to define a getter, a setter or an accessor will raise an exception Message-ID: <20190123231939.0a6115e6@capac> X-Mailer: Claws Mail 3.17.2 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/0RnbqR+A..mrpnw3ro8uSHw"; protocol="application/pgp-signature" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 79.99.200.102 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --Sig_/0RnbqR+A..mrpnw3ro8uSHw Content-Type: multipart/mixed; boundary="MP_/=Fbyds6quu6u=hiWGWlrem1" --MP_/=Fbyds6quu6u=hiWGWlrem1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hello, Using a metaclass that defines extra-slots, will only work if the extra-slo= ts are made 'exclusively' using the expression: (make <slot> #:name name) If one tries to pass a setter, a getter or an accessor, it raises an except= ion. Attached a code snipset to reproduce the error: drop it anywhere and load i= t, then enter ',bt' to see the backtrace ... I pasted the error I get, below my signature, so one can compare I am using Guile 2.2.4.1-cdb19 As you can see, the error is triggered by (oop goops) add-method! - called = by=20 compute-slot-accessors - which complains that the accessor name (or getter = or setter name) is not a valid generic function. Though I think it should be automatically created if it does not exists, I = also tried to create it - which you may try uncommenting line 20 and 21 of the c= ode snipset - but that didn't solve the problem. Thanks, David scheme@(guile-user)> (load "/usr/alto/projects/g-golf/foo-acc.scm") ;;; note: source file /usr/alto/projects/g-golf/foo-acc.scm ;;; newer than compiled /home/david/.cache/guile/ccache/2.2-LE-8-3.A/= usr/alto/projects/g-golf/foo-acc.scm.go ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=3D0 ;;; or pass the --no-auto-compile argument to disable. ;;; compiling /usr/alto/projects/g-golf/foo-acc.scm ;;; compiled /home/david/.cache/guile/ccache/2.2-LE-8-3.A/usr/alto/projects= /g-golf/foo-acc.scm.go scm-error!x Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. scheme@(foo-acc) [1]> ,bt In ice-9/boot-9.scm: 2316:4 7 (save-module-excursion _) 3835:12 6 (_) In /usr/alto/projects/g-golf/foo-acc.scm: 36:0 5 (_) In oop/goops.scm: 3032:4 4 (_ _ . _) 2925:2 3 (_ #<<foo-class> <foo> 563eb337f360> _) In srfi/srfi-1.scm: 640:9 2 (for-each #<procedure 563eb2b3b4c0 at oop/goops.scm:2720:3 (sl= ot)> (#<<slot> x 563eb337f=E2=80=A6> =E2=80=A6)) In oop/goops.scm: 2730:9 1 (_ #<<slot> x 563eb337f1b0>) In unknown file: 0 (scm-error goops-error #f "~S is not a valid generic function"= (!x) ()) scheme@(foo-acc) [1]>=20 --MP_/=Fbyds6quu6u=hiWGWlrem1 Content-Type: text/x-scheme Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename=foo-acc.scm (define-module (foo-acc) #:use-module (oop goops) #:export (<foo-class> <foo>)) (define %props '("x" "y")) (define-class <foo-class> (<class>)) (define (compute-extra-slots props slots) (map (lambda (prop) (let ((name (string->symbol prop)) (acc (string->symbol (string-append "!" prop))) #;(gen (make <generic> #:name acc))) #;(module-define! (current-module) acc gen) #;(make <slot> #:name name) #;(make <slot> #:name name #:getter name) (make <slot> #:name name #:accessor acc))) props)) (define-method (compute-slots (class <foo-class>)) (let* ((slots (next-method)) (extra (compute-extra-slots %props slots))) (slot-set! class 'direct-slots (append (slot-ref class 'direct-slots) extra)) (append slots extra))) (define-class <foo> () #:metaclass <foo-class>) --MP_/=Fbyds6quu6u=hiWGWlrem1-- --Sig_/0RnbqR+A..mrpnw3ro8uSHw Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEhCJlRZtBM3furJHe83T9k6MFetcFAlxJEqsACgkQ83T9k6MF etc7BwgAm4VDw9kzp+bPBsbXcpnP5cwHzk5MVqvP7I54w9qEaVFmYHgSPHWFkusH JVHalbVJfolA5N7ZPwDwFXjoXB3olbi+EdKeoLGUAvmGRLRmHVKv7w4I/X+JL3tK ORpDwt6NOSfgA5BL/r+JFo121AYNrpRYdntC809r4P74zO0ancbbvKml0kesGAJ8 hP0SOQr4vycuSUege86kZolrLaorwu1DxBG+BG+3sUFsshDE6oIIg7dtAqSYmpB4 d1fsqrcl0vqgtY9D/qpBrKfTb6oiEhoMVlriHCTgZoGVVJUrDCuzLsphlnaQeLnH B+WuIIpXnfJ45rmqvoPbucaQhfcLTA== =/KNs -----END PGP SIGNATURE----- --Sig_/0RnbqR+A..mrpnw3ro8uSHw--
David Pirotte <david@HIDDEN>
:bug-guile@HIDDEN
.
Full text available.bug-guile@HIDDEN
:bug#34185
; Package guile
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.