(Arne Babenhauserheide)
2014-11-14: wisp-reader: fix wisp-scheme code-tree evaluation (remove outer list wisp-reader: fix wisp-scheme code-tree evaluation (remove outer list to evaluate each expression on its own).
diff --git a/wisp-reader.w b/wisp-reader.w --- a/wisp-reader.w +++ b/wisp-reader.w @@ -50,18 +50,30 @@ define wisp-pending-port : make-object-p ; read-wisp-chunk ; try-pending -define : wisp-scheme-read-chunk-env port env - if : eof-object? : peek-char port - read-char port ; return eof: we’re done - cons 'begin : wisp-scheme-read-chunk port + +define wisp-pending-sexps '() + +define : read-one-wisp-sexp port env + define : wisp-scheme-read-chunk-env + if : eof-object? : peek-char port + read-char port ; return eof: we’re done + begin + set! wisp-pending-sexps + append wisp-pending-sexps : wisp-scheme-read-chunk port + try-pending + define : try-pending + if : null? wisp-pending-sexps + wisp-scheme-read-chunk-env + let : : sexp : car wisp-pending-sexps + set! wisp-pending-sexps : cdr wisp-pending-sexps + . sexp + try-pending define-language wisp . #:title "Wisp Scheme Syntax THIS IS EXPERIMENTAL, USE AT YOUR OWN RISK" ; . #:reader read-one-wisp-sexp - . #:reader wisp-scheme-read-chunk-env - . #:compilers `((scheme . ,compile-scheme)) ; this is scheme, not - ; wisp, because I do not - ; touch quasiquotes yet. + . #:reader : lambda (port env) : let ((x (read-one-wisp-sexp port env))) x + . #:compilers `((scheme . ,compile-scheme)) . #:decompilers `((scheme . ,decompile-scheme)) . #:evaluator : lambda (x module) : primitive-eval x . #:printer write