(Arne Babenhauserheide)
2014-08-17: implemented a complete, but horribly slow wisp reader using the implemented a complete, but horribly slow wisp reader using the scheme (read). Guess: I should have avoided append and preferred cons.
diff --git a/wisp-scheme.w b/wisp-scheme.w --- a/wisp-scheme.w +++ b/wisp-scheme.w @@ -14,6 +14,10 @@ ;; directly create a list of codelines with indentation. For this we ;; then simply reuse the appropriate function from the generic wisp ;; preprocessor. +;; +;; FIXME: Currently this is horribly slow. +;; +;; TODO: Use cons instead of append. use-modules : srfi srfi-1 @@ -338,19 +342,59 @@ define : wisp-scheme-indentation-to-pare . current-line next-line processed +define : line-code-replace-inline-colons line + ' "Replace inline colons by opening parens which close at the end of the line" + let : : readcolon : call-with-input-string ":" read + let loop + : processed '() + unprocessed line + cond + : null? unprocessed + . processed + : equal? readcolon : car unprocessed + loop + append processed : list "(" + append (cdr unprocessed) : list ")" + else + loop + append processed : list : car unprocessed + cdr unprocessed + +define : line-replace-inline-colons line + cons + line-indent line + line-code-replace-inline-colons : line-code line + define : wisp-scheme-replace-inline-colons lines ' "Replace inline colons by opening parens which close at the end of the line" - . #t + let loop + : processed '() + unprocessed lines + if : null? unprocessed + . processed + loop + append processed : list : line-replace-inline-colons : car unprocessed + cdr unprocessed + define : wisp-scheme-strip-indentation-markers lines ' "Strip the indentation markers from the beginning of the lines" - . #t + let loop + : processed '() + unprocessed lines + if : null? unprocessed + . processed + loop + append processed : cdr : car unprocessed + cdr unprocessed define : wisp-scheme-read-chunk port . "Read and parse one chunk of wisp-code" - ; TODO: process inline colons. - wisp-scheme-indentation-to-parens : wisp-scheme-read-chunk-lines port + wisp-scheme-strip-indentation-markers + wisp-scheme-replace-inline-colons + wisp-scheme-indentation-to-parens + wisp-scheme-read-chunk-lines port define : wisp-scheme-read-all port . "Read all chunks from the given port"