Hi, This was interesting -- turned out that GOOPS imports `map' from (srfi srfi-1), and it's also there from (guile-user). SRFI-1 specified it via #:replace so all is well, no warnings. However merge-generics is itself a generic which needs `map' to dispatch over its types (at first) and then that recurses, leading to badness.
But, you say, I only specified the duplicates handler after loading goops! Well indeed, but if a module didn't specify #:duplicates, its duplicates handling was implicitly dynamically scoped to whatever the current default-duplicates-handlers were. That seems bogus to me: the module declares its imports and exports and a lack of a declaration of #:duplicates indicates that the module is implicitly specifying the duplicate handlers that are described in the manual. In master I have changed the `default-duplicate-binding-handler' to simply access the handlers for the current module, as that seems to be the correct thing. Let me know how it goes! Closing as done but let's follow up :) Andy On Thu 12 Mar 2015 04:17, David Pirotte <da...@altosw.be> writes: > Hello guilers, > Hi Andy, > > Following our brief chat on irc, yesterday, here is he bug I was referring to: > > GNU Guile 2.1.0.322-eb3d6 > > setting merge-generics duplicate-binding-handler @ expand time raises an > error. > > a) here is a short test case: > > #! /bin/sh > # -*- mode: scheme; coding: utf-8 -*- > exec guile -e main -s $0 "$@" > !# > > (eval-when (expand load eval) > (use-modules (oop goops)) > (default-duplicate-binding-handler > '(merge-generics replace warn-override-core warn last))) > > (define (main args) > (display "hello\n")) > > => > > david@capac:~/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler > 76 $ ./hello > ;;; note: source file > /usr/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler/./hello > ;;; newer than compiled > /home/david/.cache/guile/ccache/2.2-LE-8-3.6/usr/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler/hello.go > ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 > ;;; or pass the --no-auto-compile argument to disable. > ;;; compiling > /usr/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler/./hello > ;;; WARNING: compilation of > /usr/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler/./hello > failed: > ;;; ERROR: No applicable method for #<<generic> merge-generics (3)> in call > Error while printing exception. > hello! > > > b) here is how it propagates, 'just' trying to import 2 gnome modules: > > #! /bin/sh > # -*- mode: scheme; coding: utf-8 -*- > exec guile -e main -s $0 "$@" > !# > > (eval-when (expand load eval) > (use-modules (oop goops)) > (default-duplicate-binding-handler > '(merge-generics replace warn-override-core warn last))) > > (use-modules (gnome-2) > (gnome gobject) > (gnome glib)) > > (define (main args) > (display "hello!\n")) > > => > > david@capac:~/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler > 40 $ ./hello > ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 > ;;; or pass the --no-auto-compile argument to disable. > ;;; compiling > /usr/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler/./hello > ;;; WARNING: compilation of > /usr/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler/./hello > failed: > ;;; ERROR: No applicable method for #<<generic> merge-generics (3)> in call > Error while printing exception. > Backtrace: > In ice-9/boot-9.scm: > 3275: 19 [try-module-autoload _ _] > 2611: 18 [save-module-excursion #<program b6fe10 7f8a1b537984>] > 3295: 17 [#<program b6fe10 7f8a1b537984>] > In unknown file: > ?: 16 [primitive-load-path "gnome/gw/glib" #<program cb7120 7f8a1b537acc>] > In gnome/gw/glib.scm: > 15: 15 [#<unspecified>] > In unknown file: > ?: 14 [load-extension "libgw-guile-gnome-glib" > "gw_init_wrapset_gnome_glib"] > In ice-9/boot-9.scm: > 2999: 13 [#<variable ac1fd0 value: #<program 7f8a1b57ae68 7f8a1b539380>> # _ > _ ...] > 3275: 12 [try-module-autoload _ _] > 2611: 11 [save-module-excursion #<program b6fc90 7f8a1b537984>] > 3295: 10 [#<program b6fc90 7f8a1b537984>] > In unknown file: > ?: 9 [primitive-load-path "gnome/gw/generics" #<program d01a60 > 7f8a1b537acc>] > In gnome/gw/generics.scm: > 35: 8 [#f] > In ice-9/boot-9.scm: > 3136: 7 [define-module* _ #:filename _ #:pure _ #:version _ #:duplicates ...] > 3074: 6 [resolve-interface (gnome gobject generics) #:select ...] > 2999: 5 [#<variable ac1fd0 value: #<program 7f8a1b57ae68 7f8a1b539380>> # _ _ > ...] > 3275: 4 [try-module-autoload _ _] > 2611: 3 [save-module-excursion #<program b6fc30 7f8a1b537984>] > 3295: 2 [#<program b6fc30 7f8a1b537984>] > In unknown file: > ?: 1 [primitive-load-path "gnome/gobject/generics" ...] > In gnome/gobject/generics.scm: > 130: 0 [()] > > gnome/gobject/generics.scm:130:0: In procedure (): > gnome/gobject/generics.scm:130:0: In procedure module-lookup: Unbound > variable: <gobject> > david@capac:~/alto/projects/guile-tests/2.2/goops/duplicate-binding-handler > 41 $ > > > Cheers, > David