On Mon 29 Sep 2014 15:24, Daniel Llorens <daniel.llor...@bluewin.ch> writes:
> The following code: > > (define-syntax define-lues > (syntax-rules () > ((_ () exp) > (call-with-values (lambda () exp) (lambda () 'unspecified))) > ((_ (var . vars) exp) > (begin > (define var (call-with-values (lambda () exp) list)) > (define-lues vars (apply values (cdr var))) > (define var (car var)))) > ((_ var exp) > (define var (call-with-values (lambda () exp) list))))) > > (define-lues (a) (values (make-vector 3 9))) > (vector-length a) > > In 2.0, either pasting this in the REPL or (load "...") a file > containing this produces the expected result, 3. > > In the current master (f7582), pasting in the REPL produces the > same result, but loading from a file this produces the error: > >> In procedure vector-ref: Wrong type argument in position 1 (expecting >> vector): (#(9 9 9)) > > I'm aware of the workarounds, I'm reporting the behavior itself. Thank you thank you thank you for this report! Incidentally it has a nice reduction, at the REPL or whereever: (begin (define x (list 1)) (define x (car x)) x) Should be 1, Guile master was giving (1). The reasons are a bug in the effects analysis for the `define!' primitive. I wonder how I didn't catch this before! Fixed in master, though sadly with a bytecode version bump. Andy