From 743adfa4f51fe7a95c810732cf67f26d7a3b6610 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 28 Apr 2016 23:02:45 -0400 Subject: [PATCH] WIP --- scheme/cyclone/transforms.sld | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index 0916ed0a..ab00db1d 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -871,6 +871,58 @@ result) (cdr exp) env)))))) +;;(define (expand-body result exp env) +;; (if (null? exp) +;; (reverse result) +;; (let ((this-exp (car exp))) +;; (cond +;; ;; Splice in begin contents and keep expanding body +;; ((begin? (car exp)) +;; (let* ((expr (car exp)) +;; (begin-exprs (begin->exps expr))) +;; (expand-body +;; result +;; (append begin-exprs (cdr exp)) +;; env))) +;; ((or (const? this-exp) +;; (prim? this-exp) +;; (ref? this-exp) +;; (quote? this-exp)) +;; (expand-body (cons this-exp result) (cdr exp) env)) +;; ((or (define? this-exp) +;; (define-c? this-exp) +;; (define-syntax? this-exp) +;; (lambda? this-exp) +;; (set!? this-exp) +;; (if? this-exp)) +;; (expand-body +;; (cons +;; (expand this-exp env) +;; result) +;; (cdr exp) +;; env)) +;; (else +;; (let ((macro #f)) +;; (when (and (app? (car exp)) +;; (symbol? (caar exp))) +;; (set! macro (env:lookup (caar exp) env #f))) +;; (if (tagged-list? 'macro macro) +;; ;; Expand macro here so we can catch begins in the expanded code, +;; ;; including nested begins +;; (let ((expanded (macro:expand (car exp) macro env))) +;; ;; Call with expanded macro in case we need to expand again +;; (expand-body +;; result +;; (cons expanded (cdr exp)) +;; env)) +;; ;; No macro, use main expand function to process +;; (expand-body +;; (cons +;; (expand (car exp) env) +;; result) +;; (cdr exp) +;; env)))))))) + ;; Top-level analysis