about summary refs log tree commit diff stats
path: root/lambda-to-mu.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-07-27 22:33:18 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-07-27 22:33:18 -0700
commit4f3510d05a144addc9612a046a1f2fa31a8a8c41 (patch)
tree014d681ff9f082d9e013b1b37302b1af82b9f56c /lambda-to-mu.mu
parent814333e288a75af10fc39b8ca8d8eefcb855fb25 (diff)
downloadmu-4f3510d05a144addc9612a046a1f2fa31a8a8c41.tar.gz
3156
Make 'stream' generic.
Diffstat (limited to 'lambda-to-mu.mu')
-rw-r--r--lambda-to-mu.mu11
1 files changed, 6 insertions, 5 deletions
diff --git a/lambda-to-mu.mu b/lambda-to-mu.mu
index cda352a7..fdde50ef 100644
--- a/lambda-to-mu.mu
+++ b/lambda-to-mu.mu
@@ -170,17 +170,18 @@ scenario cell-operations-on-pair [
 def parse in:address:array:character -> out:address:cell [
   local-scope
   load-ingredients
-  s:address:stream <- new-stream in
+  s:address:stream:character <- new-stream in
   out, s <- parse s
   trace 2, [app/parse], out
 ]
 
-def parse in:address:stream -> out:address:cell, in:address:stream [
+def parse in:address:stream:character -> out:address:cell, in:address:stream:character [
   local-scope
   load-ingredients
   # skip whitespace
   in <- skip-whitespace in
-  c:character <- peek in
+  c:character, eof?:boolean <- peek in
+  reply-if eof?, 0/nil
   pair?:boolean <- equal c, 40/open-paren
   {
     break-if pair?
@@ -221,11 +222,11 @@ def parse in:address:stream -> out:address:cell, in:address:stream [
     # read in any remaining elements
     curr:address:cell <- copy out
     {
+      in <- skip-whitespace in
       end?:boolean <- end-of-stream? in
       not-end?:boolean <- not end?
       assert not-end?, [unbalanced '(' in expression]
       # termination check: ')'
-      in <- skip-whitespace in
       c <- peek in
       {
         close-paren?:boolean <- equal c, 41/close-paren
@@ -264,7 +265,7 @@ def parse in:address:stream -> out:address:cell, in:address:stream [
   }
 ]
 
-def skip-whitespace in:address:stream -> in:address:stream [
+def skip-whitespace in:address:stream:character -> in:address:stream:character [
   local-scope
   load-ingredients
   {