Handle all-expression cases explicitly rather than implicitly.

svn: r9183
This commit is contained in:
Sam Tobin-Hochstadt 2008-04-07 21:19:25 +00:00
parent b800f4ed3e
commit 7f974d7383

View File

@ -52,7 +52,6 @@
(list #'id) (list #'id)
null)] null)]
[(#%top . id) null] [(#%top . id) null]
[(#%expression e) (free-vars #'e)]
[(quote q) null] [(quote q) null]
[(quote-syntax q) null] [(quote-syntax q) null]
[(#%plain-lambda formals expr ...) [(#%plain-lambda formals expr ...)
@ -71,7 +70,11 @@
(free-vars #'(#%plain-lambda (id ... ...) rhs ... expr ...))] (free-vars #'(#%plain-lambda (id ... ...) rhs ... expr ...))]
[(letrec-syntaxes+values stx-bindings ([(id ...) rhs] ...) expr ...) [(letrec-syntaxes+values stx-bindings ([(id ...) rhs] ...) expr ...)
(free-vars #'(#%plain-lambda (id ... ...) rhs ... expr ...))] (free-vars #'(#%plain-lambda (id ... ...) rhs ... expr ...))]
[(_ expr ...) [(kw expr ...)
;; if, begin, begin0, set!, #%app, #%variable-reference, with-continuation-mark (ormap (lambda (k) (free-identifier=? k #'kw))
(merge (map free-vars (syntax->list #'(expr ...))))])) (list #'if #'begin #'begin0 #'set! #'#%plain-app #'#%expression
#'#%variable-reference #'with-continuation-mark))
(merge (map free-vars (syntax->list #'(expr ...))))]
[(kw . _)
(error 'free-vars "unknown core form: ~a" (syntax->datum #'kw))]))