wisp
 
(Arne Babenhauserheide)
2015-06-23: FIX: broke with more than 2 consecutive empty lines.

FIX: broke with more than 2 consecutive empty lines.

diff --git a/examples/ensemble-estimation.w b/examples/ensemble-estimation.w
--- a/examples/ensemble-estimation.w
+++ b/examples/ensemble-estimation.w
@@ -1,4 +1,5 @@
 #!/usr/bin/env sh
+# -*- wisp -*-
 exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -e '(@@ (examples ensemble-estimation) main)' -s "$0" "$@"
 ; !#
 
diff --git a/wisp-reader.w b/wisp-reader.w
--- a/wisp-reader.w
+++ b/wisp-reader.w
@@ -32,7 +32,12 @@ define : read-one-wisp-sexp port env
             : eof-object? : peek-char port
               read-char port ; return eof: we’re done
             else
-              car : wisp-scheme-read-chunk port
+              let : : chunk : wisp-scheme-read-chunk port
+                cond
+                  : not : null? chunk
+                    car chunk
+                  else
+                    . #f
 
 define-language wisp
   . #:title "Wisp Scheme Syntax. See SRFI-119 for details. THIS IS EXPERIMENTAL, USE AT YOUR OWN RISK"
diff --git a/wisp-scheme.w b/wisp-scheme.w
--- a/wisp-scheme.w
+++ b/wisp-scheme.w
@@ -211,19 +211,19 @@ define : wisp-scheme-read-chunk-lines po
              currentsymbols '()
              emptylines 0
            cond
-            : <= 2 emptylines ; the chunk end has to be checked
+            : >= emptylines 2 ; the chunk end has to be checked
                               ; before we look for new chars in the
                               ; port to make execution in the REPL
                               ; after two empty lines work
                               ; (otherwise it shows one more line).
              . indent-and-symbols
-            : and inindent (zero? currentindent) (not (null? indent-and-symbols)) (not inunderscoreindent) (not (or (equal? #\space (peek-char port)) (equal? #\newline (peek-char port))))
-             . indent-and-symbols ; top-level form ends chunk
             else
              let : : next-char : peek-char port
                cond
                  : eof-object? next-char
                    append indent-and-symbols : list : append (list currentindent) currentsymbols
+                 : and inindent (zero? currentindent) (not incomment) (not (null? indent-and-symbols)) (not inunderscoreindent) (not (or (equal? #\space next-char) (equal? #\newline next-char) (equal? (string-ref ";" 0) next-char)))
+                  append indent-and-symbols ; top-level form ends chunk
                  : and inindent : equal? #\space next-char
                    read-char port ; remove char
                    loop