[Larceny-users] [long] identifier bindings and visibility	across phases
    Marco Maggi 
    marco.maggi-ipsu at poste.it
       
    Tue Oct  6 17:02:44 EDT 2009
    
    
  
"Andre van Tonder" wrote:
> On Tue, 6 Oct 2009, Andre van Tonder wrote:
> 
> > WOPPA is not exported from library DEF, so any attempt to refer to it from
> > outside DEF should fail.  The behavior of Larceny and Ypsilon are correct,
> > and that of Ikarus and Mosh are incorrect.
> 
> Reconsidering, I think this might be underspecified in R6RS, so both
> behaviours might be fine.
Thanks, I see that changing (def) to:
(library (def)
  (export woppa)
  (import (rnrs) (lib))
  (define (woppa) 123)
  (define-thing woppa woppa))
makes everything work; are  there relevant paragraphs in the
R6RS  documents?   It  seems  to  me  that  the  chapter  on
SYNTAX-CASE  says  nothing  about non-exported  bindings  in
syntax objects.
  But, if it is an export problem, why the following works?
BLUE is not exported by (sublib):
(library (sublib)
  (export h)
  (import (rnrs))
  (define (blue)
    456)
  (define h
    (make-eq-hashtable))
  (hashtable-set! h 'b blue))
(library (lib)
  (export thing)
  (import (rnrs) (for (sublib) expand run))
  (define-syntax thing
    (lambda (stx)
      (syntax-case stx ()
	((_)
	 (with-syntax ((f (hashtable-ref h 'b #f)))
	   #'('f)))))))
;;; the program
(import (rnrs) (lib))
(write (thing))
is it  a specific  interaction between exporting  and syntax
objects?  The following works with Ikarus, Mosh and Ypsilon;
it fails only on Larceny:
(library (sublib)
  (export h)
  (import (rnrs))
  (define (blue)
    456)
  (define h
    (make-eq-hashtable))
  (hashtable-set! h 'b (syntax blue)))
(library (lib)
  (export thing)
  (import (rnrs) (for (sublib) expand run))
  (define-syntax thing
    (lambda (stx)
      (syntax-case stx ()
	((_)
	 (with-syntax ((f (hashtable-ref h 'b #f)))
	   #'(f)))))))
;;; the program
(import (rnrs) (lib))
(write (thing))
-- 
Marco Maggi
    
    
More information about the Larceny-users
mailing list