Subject: bug#20093: master: setting merge-generics duplicate-binding-handler @ expand time raises an error

From: David Pirotte <[email-masked]>
Date: Thu, 12 Mar 2015 00:17:18 -0300

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:

--8<---------------cut here---------------start------------->8---
#! /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"))
--8<---------------cut here---------------start------------->8---

=>

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:

--8<---------------cut here---------------start------------->8---
#! /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"))
--8<---------------cut here---------------start------------->8---

=>

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