Subject: bug#24286: closed (Re: bug#24286: Guile-2.2: srfi-1 + #:duplicates (merge-generics...) + for-each raises an exception)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 02 Sep 2016 07:45:02 +0000

Your bug report

#24286: Guile-2.2: srfi-1 + #:duplicates (merge-generics...) + for-each raises an exception

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
24286: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=24286
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#24286: Guile-2.2: srfi-1 + #:duplicates (merge-generics...) + for-each raises an exception
From: Andy Wingo <[email-masked]>
To: David Pirotte <[email-masked]>
Cc: [email-masked]
Date: Fri, 02 Sep 2016 09:44:36 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

On Mon 22 Aug 2016 03:03, David Pirotte <[email-masked]> writes:

> Here below a mini module [1], which raises an exception [2] using 2.1.3.104-8f2f8 (it
> compiles fine using 2.0.12).  It looks a bit of a 'silly' module but the real one
> here do need this combination, I just minimized it for tracking purposes...

Thanks for the report, it was a nice bug.  Fixed in master.

Cheers,

Andy

Subject: Guile-2.2: srfi-1 + #:duplicates (merge-generics...) + for-each raises an exception
From: David Pirotte <[email-masked]>
To: <[email-masked]>
Date: Sun, 21 Aug 2016 22:03:33 -0300
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello Guilers,
Hi Andy,

Here below a mini module [1], which raises an exception [2] using 2.1.3.104-8f2f8 (it
compiles fine using 2.0.12).  It looks a bit of a 'silly' module but the real one
here do need this combination, I just minimized it for tracking purposes...

For info, if I either comment the use of srfi-1, or merge-generics, _or_ the for-each
expression, it compiles fine. I also tried foo to just do a (filter-map string?
words) and no for-each, to circumvent the problem as far as I could, and it
compiles fie as well: it appears there is a side effect of the for-each version from
srfi-1 over the core version, when using goops and declaring #:duplicates
(merge-generics ...).

Cheers,
David

[1]

(define-module (foo)
  #:use-module (srfi srfi-1)
  #:use-module (oop goops)
  
  #:duplicates (merge-generics
		replace
		warn-override-core
		warn
		last)
 
  #:export (foo))

(define (foo words)
  (for-each (lambda (word)
	      (display (string-append word " ")))
      words)
  (newline))

[2]

guild --version
guild (GNU Guile) 2.1.3.104-8f2f8

guild compile foo.scm
Backtrace:
In system/base/compile.scm:
     43:4 19 (call-once _)
In ice-9/boot-9.scm:
    829:4 18 (with-throw-handler _ _ _)
In system/base/compile.scm:
    59:11 17 (_)
   155:11 16 (_ #<closed: file 2067e00>)
   235:18 15 (read-and-compile #<input: foo.scm 13> #:from _ #:to _ # …)
   183:32 14 (compile-fold (#<procedure compile-tree-il (x e opts)>) …)
In ice-9/boot-9.scm:
   2325:4 13 (save-module-excursion #<procedure 1e09ba0 at language/…>)
In language/scheme/compile-tree-il.scm:
    31:15 12 (_)
In ice-9/psyntax.scm:
  1208:22 11 (expand-top-sequence ((define (foo words) (# (…) #) #)) …)
In ice-9/boot-9.scm:
   224:17 10 (map1 (#<procedure 205db90 at ice-9/psyntax.scm:1125:3…>))
In ice-9/psyntax.scm:
  1383:12  9 (_)
  1763:11  8 (lp (#(syntax-object (for-each (lambda (#) #) #) # …) …) …)
  1586:33  7 (parse (((("placeholder" placeholder) (# . #) …) . #) …) …)
  1307:27  6 (syntax-type (for-each (lambda (word) (display #)) #) # …)
  1291:39  5 (syntax-type for-each (("placeholder" placeholder) # #) …)
   302:24  4 (resolve-identifier _ _ (("placeholder" placeholder) …) …)
In unknown file:
           3 (module-variable #<directory (foo) 20c4bd0> for-each)
In oop/goops.scm:
   1437:4  2 (cache-miss #<directory (foo) 20c4bd0> for-each #<inte…> …)
In unknown file:
           1 (scm-error goops-error #f "No applicable method for ~S…" …)
In ice-9/boot-9.scm:
   753:26  0 (dispatch-exception _ _ _)

ice-9/boot-9.scm:753:26: In procedure dispatch-exception:
ice-9/boot-9.scm:753:26: No applicable method for #<<generic> merge-generics (3)> in
call (merge-generics #<directory (foo) 20c4bd0> for-each #<interface (guile)
1e02ea0> #<procedure for-each (f l) | (f l1 l2) | (f l1 . rest)> #<interface (srfi
1e02ea0> srfi-1) 1e4ca20> #<procedure for-each (f l) | (f l1 l2) | (f l1 . rest)> #f
1e02ea0> #f)