[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fixing the slib mess

From: Stefan Israelsson Tampe
Subject: Re: Fixing the slib mess
Date: Mon, 22 Oct 2012 20:31:20 +0200

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))))


scheme@(guile-user) [1]> (f +)

;;; (global)

;;; ((+ guile-user))


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?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]