bug#64508: Optimization of "-" function is incorrect in presence of GOOPS overloading

Jean Abou Samra <[email protected]>
Newsgroups gmane.lisp.guile.bugs
Message-ID <[email protected]>
The following code demonstrates that when byte-compiling (but not when
interpreting), the call (- x) is transformed into (- 0 x). This results
in failure of custom - methods defined via GOOPS.

I think this says it all:


$ guile3.0
GNU Guile 3.0.7 [...]
scheme@(guile-user)> ,optimize (- x)
$1 = (- 0 x)


The longer version:


$ cat minus.scm 
(use-modules (oop goops))

(define-class <Foo> ()
  (bar #:init-keyword #:bar))

(define-method (- (x <Foo>))
  (make <Foo> #:bar (- (slot-ref x 'bar))))

(display (slot-ref (- (make <Foo> #:bar 5))
                   'bar))
(newline)



$ guile3.0 --no-auto-compile minus.scm 
-5


$ guile3.0 minus.scm 
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /home/jean/tmp/minus.scm
;;; compiled /home/jean/.cache/guile/ccache/3.0-LE-8-
4.5/home/jean/tmp/minus.scm.go
Backtrace:
In ice-9/boot-9.scm:
  1752:10  8 (with-exception-handler _ _ #:unwind? _ # _)
In unknown file:
           7 (apply-smob/0 #<thunk 7f569a4a0f60>)
In ice-9/boot-9.scm:
    724:2  6 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
In ice-9/eval.scm:
    619:8  5 (_ #(#(#<directory (guile-user) 7f569a499c80>)))
In ice-9/boot-9.scm:
   2835:4  4 (save-module-excursion _)
  4380:12  3 (_)
In /home/jean/tmp/minus.scm:
     9:19  2 (_)
In oop/goops.scm:
  1567:11  1 (cache-miss 0 #<<Foo> 7f56944e70b0>)
   1585:2  0 (_ _ _)

oop/goops.scm:1585:2: No applicable method for #<<generic> - (1)> in call (- 0
#<<Foo> 7f56944e70b0>)
signature.asc (application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE-----

iHUEABYKAB0WIQSZ7TKxnKGyBvBjzBmj8PYLiTOX/gUCZKgLbwAKCRCj8PYLiTOX
/kA/AP97eMsxzCb4Dq1X6Ph1AfDTZ6j6nKDVF3HI5VQIvrrlPwEAqwYEnPFWCtkd
NWMCYj1t4pKR9Q2dUyZRLcea789/Egk=
=JJRk
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.