diff options
Diffstat (limited to 'module/language/brainfuck/parse.scm')
-rw-r--r-- | module/language/brainfuck/parse.scm | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/module/language/brainfuck/parse.scm b/module/language/brainfuck/parse.scm index 0a71638d8..81dbdd94a 100644 --- a/module/language/brainfuck/parse.scm +++ b/module/language/brainfuck/parse.scm @@ -66,9 +66,16 @@ (define (read-brainfuck p) (let iterate ((parsed '())) (let ((chr (read-char p))) - (if (or (eof-object? chr) (eq? #\] chr)) - (reverse-without-nops parsed) - (iterate (cons (process-input-char chr p) parsed)))))) + (cond + ((eof-object? chr) + (let ((parsed (reverse-without-nops parsed))) + (if (null? parsed) + chr ;; pass on the EOF object + parsed))) + ((eqv? chr #\]) + (reverse-without-nops parsed)) + (else + (iterate (cons (process-input-char chr p) parsed))))))) ; This routine processes a single character of input and builds the |