Subject: GOOPS cannot use generic as accessor in 3.0.x

From: Jan Nieuwenhuizen <[email-masked]>
Date: Thu, 18 Mar 2021 14:19:00 +0100

Hi!

Trying to upgrade 8sync to latest Guile, I found the problem that a
generic function cannot be used as as accessor, and then be
exported/imported.  Or something.  At least, the problem is triggered
when compiling (or using) a module that does that.

See the attached foo.scm, bar.scm and `doit', when running it in the
Guile source tree I get

--8<---------------cut here---------------start------------->8---
$ ./doit 
++ export GUILE_LOAD_COMPILED_PATH=/home/janneke/src/8sync/wip
++ GUILE_LOAD_COMPILED_PATH=/home/janneke/src/8sync/wip
++ ./pre-inst-env guild compile -L . -o foo.go foo.scm
wrote `foo.go'
++ ./pre-inst-env guild compile -L . -o bar.go bar.scm
Backtrace:
In ice-9/eval.scm:
   293:34 19 (_ #<module (#{ g79}#) 7ff689b8dd20>)
In ice-9/boot-9.scm:
   3380:4 18 (define-module* _ #:filename _ #:pure _ #:version _ #:imports _ #:exports _ #:replacements _ # _ # …)
  2565:24 17 (call-with-deferred-observers #<procedure 7ff689b948c0 at ice-9/boot-9.scm:3381:5 ()>)
  3393:24 16 (_)
   222:17 15 (map1 (((foo))))
  3297:17 14 (resolve-interface (foo) #:select _ #:hide _ #:prefix _ #:renamer _ #:version _)
In ice-9/threads.scm:
    390:8 13 (_ _)
In ice-9/boot-9.scm:
  3223:13 12 (_)
In ice-9/threads.scm:
    390:8 11 (_ _)
In ice-9/boot-9.scm:
  3507:20 10 (_)
   2806:4  9 (save-module-excursion #<procedure 7ff68aeece10 at ice-9/boot-9.scm:3508:21 ()>)
  3527:26  8 (_)
In unknown file:
           7 (primitive-load-path "foo" #<procedure 7ff689bb6140 at ice-9/boot-9.scm:3514:37 ()>)
In foo.scm:
     12:0  6 (_)
In oop/goops.scm:
   2852:4  5 (_ _ . _)
   2782:2  4 (_ #<<class> <foo> 7ff688c64f80> _)
In srfi/srfi-1.scm:
    634:9  3 (for-each #<procedure 7ff688c5c0c0 at oop/goops.scm:2579:3 (slot)> (#<<slot> foo 7ff688c64e80>))
In oop/goops.scm:
  2590:22  2 (_ #<<slot> foo 7ff688c64e80>)
In unknown file:
           1 (setter #<<generic> .foo (1)>)
In ice-9/boot-9.scm:
  1669:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1669:16: In procedure raise-exception:
In procedure setter: Wrong type argument in position 1: #<<generic> .foo (1)>
--8<---------------cut here---------------end--------------->8---

I found similar behaviour in guile-3.0.2, guile-2.2.7 is fine.

Greetings,
Janneke

-- 
Jan Nieuwenhuizen <[email-masked]> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com