summaryrefslogtreecommitdiff
path: root/module/language/brainfuck/parse.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/language/brainfuck/parse.scm')
-rw-r--r--module/language/brainfuck/parse.scm13
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