about summary refs log tree commit diff stats
path: root/066stream.mu
diff options
context:
space:
mode:
Diffstat (limited to '066stream.mu')
-rw-r--r--066stream.mu6
1 files changed, 6 insertions, 0 deletions
diff --git a/066stream.mu b/066stream.mu
index 007fbdb3..9c7824dd 100644
--- a/066stream.mu
+++ b/066stream.mu
@@ -7,6 +7,7 @@ container stream:_elem [
 def new-stream s:&:@:_elem -> result:&:stream:_elem [
   local-scope
   load-ingredients
+  return-unless s, 0/null
   result <- new {(stream _elem): type}
   *result <- put *result, index:offset, 0
   *result <- put *result, data:offset, s
@@ -15,12 +16,14 @@ def new-stream s:&:@:_elem -> result:&:stream:_elem [
 def rewind in:&:stream:_elem -> in:&:stream:_elem [
   local-scope
   load-ingredients
+  return-unless in
   *in <- put *in, index:offset, 0
 ]
 
 def read in:&:stream:_elem -> result:_elem, empty?:bool, in:&:stream:_elem [
   local-scope
   load-ingredients
+  assert in, [cannot read; stream has no data]
   empty? <- copy 0/false
   idx:num <- get *in, index:offset
   s:&:@:_elem <- get *in, data:offset
@@ -39,6 +42,7 @@ def read in:&:stream:_elem -> result:_elem, empty?:bool, in:&:stream:_elem [
 def peek in:&:stream:_elem -> result:_elem, empty?:bool [
   local-scope
   load-ingredients
+  assert in, [cannot peek; stream has no data]
   empty?:bool <- copy 0/false
   idx:num <- get *in, index:offset
   s:&:@:_elem <- get *in, data:offset
@@ -55,6 +59,7 @@ def peek in:&:stream:_elem -> result:_elem, empty?:bool [
 def read-line in:&:stream:char -> result:text, in:&:stream:char [
   local-scope
   load-ingredients
+  assert in, [cannot read-line; stream has no data]
   idx:num <- get *in, index:offset
   s:text <- get *in, data:offset
   next-idx:num <- find-next s, 10/newline, idx
@@ -67,6 +72,7 @@ def read-line in:&:stream:char -> result:text, in:&:stream:char [
 def end-of-stream? in:&:stream:_elem -> result:bool [
   local-scope
   load-ingredients
+  assert in, [cannot check end-of-stream?; stream has no data]
   idx:num <- get *in, index:offset
   s:&:@:_elem <- get *in, data:offset
   len:num <- length *s