guile-devel
[Top][All Lists]
Advanced

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

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

reply via email to

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