On 23-02-2023 12:38, Ludovic Courtès wrote: > Hi, > > Maxime Devos skribis: > >> For complicated macros, especially macros that are used correctly but >> have a bug in their implementation somewhere and use 'syntax-case' >> or 'syntax-rules' multiple times, it can be very convenient to know >> _which_ syntax-case or syntax-rules raised the syntax-error. >> >> E.g., I'm currently debugging some changes to a (non-Guile) macro, >> and I don't know what to make of the following -- the '#:getter . datum-type' >> isn't even present in the original code anywhere: >> >> ice-9/boot-9.scm:1685:16: In procedure raise-exception: >> Syntax error: >> unknown location: source expression failed to match any pattern in form (#:getter . datum-type) >> make: *** [Makefile:1333: gnu/gnunet/dht/client.go] Fout 1 >> >> As such, partially revert the following commit that does not give a >> rationale on how backtraces for syntax errors aren't helpful. > > Do you have a simple reproducer and a before/after comparison showing > what Guile prints? Looks like the patch didn't actually work: (define-syntax syntax-stuff-twice (lambda (s) (define (process/internal object) ;; Oops! Only certain forms of 'object' were accepted. (throw 'syntax-error "syntax-stuff-twice" "bad" '() object object)) (define (process/x x) #`(list #,(process/internal x))) (define (process/y y) #`(vector #,(process/internal y))) (define (computify o) (datum->syntax #false o)) (syntax-case s () ((_) ;; Let's compute some syntax, for some reason. (let ((x (computify "imagine this syntax is very hard to follow")) (y (computify "and difficult to distinguish from this"))) #`(list #,(process/x x) #,(process/y y))))))) (syntax-stuff-twice) ;; Before: ;; unknown file:#f:#f: syntax-stuff-twice: bad in subform # of # ;; After: ;; [the same thing] ;; ;; Looks like another patch is needed ...