Hi Mikael and welcome back!
*But*, the proper implementation of syntax-toplevel? requires > modification of psyntax.scm and adding it to the (system syntax) > module. I didn't want to do this until I've had your comments, so the > present patch has its own syntax-object accessors (which breaks > abstraction and is therefore not a real solution). I should also say > that I have not yet fixed the slib interface to the new Guile uniform > arrays, so there's a lot of slib functionality which won't yet work. > > Comments? Can I add syntax-toplevel? to psyntax.scm and (system > syntax)? Do you think it is reasonable to submit something along the > line of guile.init.diff to slib guile.init? > > Best regards, > Mikael Djurfeldt > I can answer with some kind of suggestion here. in (system syntax) there is syntax-local-binding which you can use for example as (define-syntax f (lambda (x) (syntax-case x () ((_ x) (call-with-values (lambda () (syntax-local-binding #'x)) (lambda (x y) (pk x) (pk y))) #'#t)))) Then, scheme@(guile-user) [1]> (f +) ;;; (global) ;;; ((+ guile-user)) And, scheme@(guile-user) [1]> (let ((s 1)) (f s)) ;;; (lexical) ;;; (s-490) (let ((s 1)) (define-syntax g (lambda (x) #'#f)) (f g)) ;;; (displaced-lexical) ;;; (#f) I'm not sure what exactly syntax-toplevel? does, but can you base it on syntax-local-binding? And if not is it possible to change syntax-local-binding so that you can use it? Regards Stefan