~ chicken-core (chicken-5) 0b728d168f467502e635f9cce4aad1ec124e6fd1
commit 0b728d168f467502e635f9cce4aad1ec124e6fd1
Author: felix <felix@y.(none)>
AuthorDate: Wed Mar 31 23:47:29 2010 +0200
Commit: felix <felix@y.(none)>
CommitDate: Wed Mar 31 23:47:29 2010 +0200
export used outside module is ignored; slight cleanup in syntax-checks for define
diff --git a/expand.scm b/expand.scm
index 6ca44c93..8ba70287 100644
--- a/expand.scm
+++ b/expand.scm
@@ -527,9 +527,10 @@
vals)
mvars mvals) ]
[(pair? (car head))
- (##sys#check-syntax 'define x '(_ (_ . lambda-list) . #(_ 1)) #f se)
- (loop2 (cons (macro-alias 'define se)
- (##sys#expand-curried-define head (cddr x) se))) ]
+ (##sys#check-syntax
+ 'define x '(_ (_ . lambda-list) . #(_ 1)) #f se)
+ (loop2
+ (##sys#expand-curried-define head (cddr x) se)) ]
[else
(##sys#check-syntax
'define x
@@ -586,7 +587,7 @@
`(##core#lambda ,(cdr head) ,@body) )
(loop (car head) `((##core#lambda ,(cdr head) ,@body)) ) ))
(let ([exp (loop head body)])
- (list name exp) ) ) )
+ (list 'define name exp) ) ) )
;;; General syntax checking routine:
@@ -1008,25 +1009,23 @@
'define
'()
(##sys#er-transformer
- (lambda (form r c)
- (let loop ((form (cdr form)))
- (let ((head (car form))
- (body (cdr form)) )
+ (lambda (x r c)
+ (##sys#check-syntax 'define x '(_ . #(_ 1)))
+ (let loop ((form x))
+ (let ((head (cadr form))
+ (body (cddr form)) )
(cond ((not (pair? head))
- (##sys#check-syntax 'define head 'symbol)
- (##sys#check-syntax 'define body '#(_ 0 1))
+ (##sys#check-syntax 'define form '(_ symbol . #(_ 0 1)))
(##sys#register-export head (##sys#current-module))
`(##core#set!
,head
,(if (pair? body) (car body) '(##core#undefined))) )
((pair? (car head))
- (##sys#check-syntax 'define head '(_ . lambda-list))
- (##sys#check-syntax 'define body '#(_ 1))
- (loop (##sys#expand-curried-define head body '())) ) ;*** '() should be se
+ (##sys#check-syntax 'define form '(_ (_ . lambda-list) . #(_ 1)))
+ (loop (##sys#expand-curried-define head body '())) ) ;XXX '() should be se
(else
- (##sys#check-syntax 'define head '(symbol . lambda-list))
- (##sys#check-syntax 'define body '#(_ 1))
- (loop (list (car head) `(,(r 'lambda) ,(cdr head) ,@body))))))))))
+ (##sys#check-syntax 'define form '(_ (symbol . lambda-list) . #(_ 1)))
+ (loop (list (car x) (car head) `(##core#lambda ,(cdr head) ,@body))))))))))
(##sys#extend-macro-environment
'define-syntax
@@ -1401,22 +1400,21 @@
(lambda (x r c)
(let ((exps (cdr x))
(mod (##sys#current-module)))
- (unless mod
- (syntax-error 'export "`export' used outside module body"))
- (for-each
- (lambda (exp)
- (when (and (not (symbol? exp))
- (let loop ((iexp exp))
- (cond ((null? iexp) #f)
- ((not (pair? iexp)) #t)
- ((not (symbol? (car iexp))) #t)
- (else (loop (cdr iexp))))))
- (syntax-error 'export "invalid export syntax" exp (module-name mod))))
- exps)
- (set-module-export-list!
- mod
- (append (module-export-list mod)
- (map ##sys#strip-syntax exps)))
+ (when mod
+ (for-each
+ (lambda (exp)
+ (when (and (not (symbol? exp))
+ (let loop ((iexp exp))
+ (cond ((null? iexp) #f)
+ ((not (pair? iexp)) #t)
+ ((not (symbol? (car iexp))) #t)
+ (else (loop (cdr iexp))))))
+ (syntax-error 'export "invalid export syntax" exp (module-name mod))))
+ exps)
+ (set-module-export-list!
+ mod
+ (append (module-export-list mod)
+ (map ##sys#strip-syntax exps))))
'(##core#undefined)))))
Trap