From 5911336d1604c72db363c1bc8ed32df62523c141 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 27 Jul 2021 16:39:13 -0400 Subject: [PATCH 1/2] WIP - first attempt to clean eval macro's This seemed promising but fails when compiling cyclone: cyclone -A . srfi/106.sld Error at line 376, column 5 of srfi/106.sld: Unbound variable: unquote --- scheme/eval.sld | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/scheme/eval.sld b/scheme/eval.sld index d7d2f0a6..617e7e9d 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -614,16 +614,18 @@ ;(define use-env (env:extend-environment '() '() '())) (if (Cyc-macro? macro-op) ;; Compiled macro, call directly - (let ((expanded - (macro:expand exp (list 'macro macro-op) a-env rename-env local-renamed))) - (analyze expanded + (let* ((expanded + (macro:expand exp (list 'macro macro-op) a-env rename-env local-renamed)) + (cleaned (macro:cleanup expanded rename-env))) + (analyze cleaned a-env rename-env local-renamed)) ;; Interpreted macro, build expression and eval - (let* ((expanded (macro:expand exp (list 'macro macro-op) a-env rename-env local-renamed))) + (let* ((expanded (macro:expand exp (list 'macro macro-op) a-env rename-env local-renamed)) + (cleaned (macro:cleanup expanded rename-env))) (analyze - expanded + cleaned a-env rename-env local-renamed)))))) @@ -917,6 +919,10 @@ ;(newline) ;(display "*/ ") (cond + ((and (pair? expr) ;; Improper list + (not (list? expr))) + (cons (clean (car expr) bv) + (clean (cdr expr) bv))) ((const? expr) expr) ((null? expr) expr) ((quote? expr) From dd294c78adce6e96f6c74ead0436c3463c555b6b Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 29 Jul 2021 22:58:29 -0400 Subject: [PATCH 2/2] Issue 395 - Cleanup, use _expand instead of macro:expand --- scheme/eval.sld | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scheme/eval.sld b/scheme/eval.sld index 617e7e9d..ee12e9e2 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -611,18 +611,16 @@ #f)) (expand (lambda (macro-op) - ;(define use-env (env:extend-environment '() '() '())) (if (Cyc-macro? macro-op) ;; Compiled macro, call directly - (let* ((expanded - (macro:expand exp (list 'macro macro-op) a-env rename-env local-renamed)) + (let* ((expanded (_expand exp a-env rename-env '() local-renamed)) (cleaned (macro:cleanup expanded rename-env))) (analyze cleaned a-env rename-env local-renamed)) ;; Interpreted macro, build expression and eval - (let* ((expanded (macro:expand exp (list 'macro macro-op) a-env rename-env local-renamed)) + (let* ((expanded (_expand exp a-env rename-env '() local-renamed)) (cleaned (macro:cleanup expanded rename-env))) (analyze cleaned