diff options
author | Andy Wingo <wingo@pobox.com> | 2009-10-16 17:56:39 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-10-23 15:10:25 +0200 |
commit | 8753fd537c4eadf7495f4ba867def99e77246dfc (patch) | |
tree | 75f3346261ae62909bc3d9776df0571990d44943 /module/language/brainfuck/parse.scm | |
parent | 8a4ca0ea3bd3e378fc63ef719ce828b7252b3985 (diff) | |
download | guile-8753fd537c4eadf7495f4ba867def99e77246dfc.tar.gz |
fix brainfuck for new tree-il, and add tests
* test-suite/Makefile.am:
* test-suite/tests/brainfuck.test: Add a brainfuck test.
* module/system/base/compile.scm: Also export read-and-compile.
* module/language/tree-il/spec.scm (join): Fix the joiner in the
0-expression case.
* module/language/tree-il/primitives.scm (+): Recognize (+ x -1) as 1-.
* module/language/brainfuck/parse.scm (read-brainfuck): Return EOF if we
actually received EOF, and there were no expressions read.
* module/language/brainfuck/compile-tree-il.scm (compile-body): Fix the
compiler for the new format of "lambda" in tree-il.
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 |