Allow eval to handle syntax-rules

This commit is contained in:
Justin Ethier 2017-12-08 12:56:55 -05:00
parent 28c5672b0a
commit 5adf35a364

View file

@ -468,23 +468,21 @@
(define (analyze-syntax exp a-env) (define (analyze-syntax exp a-env)
(let ((var (cadr exp))) (let ((var (cadr exp)))
(cond (cond
((tagged-list? 'er-macro-transformer (caddr exp)) ((tagged-list? 'er-macro-transformer (caddr exp)) ;; TODO: need to handle renamed er symbol here??
(let ((sproc (make-macro (cadr (caddr exp))))) ;(analyze-syntax-lambda (cadr (caddr exp)) a-env))) (let ((sproc (make-macro (cadr (caddr exp)))))
(lambda (env) (lambda (env)
(env:define-variable! var sproc env) (env:define-variable! var sproc env)
'ok))) 'ok)))
(else (else
;; TODO: need to support syntax-rules, and other methods of ;; Just expand the syntax rules
;; building a macro. maybe call into something like ;; Possibly want to check the macro system here
;; analyze-syntax-lambda instead of erroring here (let* ((rename-env (env:extend-environment '() '() '()))
(error "macro syntax not supported yet"))))) (expanded (expand exp a-env rename-env))
(cleaned (macro:cleanup expanded rename-env)))
;(define (analyze-syntax-lambda exp a-env) (let ((sproc (make-macro (caddr cleaned))))
; (let ((vars (lambda-parameters exp)) (lambda (env)
; (bproc (analyze-sequence (lambda-body exp) a-env))) (env:define-variable! var sproc env)
; (write `(debug ,(lambda-body exp))) 'ok)))))))
; ;(lambda (env)
; (make-macro `(lambda ,vars ,@(lambda-body exp)))))
(define (analyze-import exp env) (define (analyze-import exp env)
(lambda (env) (lambda (env)