about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-01-26 20:29:55 -0800
committerKartik K. Agaram <vc@akkartik.com>2015-01-26 20:29:55 -0800
commite0511280e692810c84693eb11f40756bb23ce11f (patch)
treef9e7443e9bd8add0f60cfed6625041b385723477
parentda31c4245227d6e05080d4e289e34c5360aa933d (diff)
downloadmu-e0511280e692810c84693eb11f40756bb23ce11f.tar.gz
635
-rw-r--r--mu.arc17
-rw-r--r--mu.arc.t40
2 files changed, 54 insertions, 3 deletions
diff --git a/mu.arc b/mu.arc
index fc8fc9fc..14d23f95 100644
--- a/mu.arc
+++ b/mu.arc
@@ -2113,6 +2113,9 @@
     (i:integer <- copy 0:literal)
     (line-contents:string-address <- get line:buffer-address/deref data:offset)
     (max:integer <- get line:buffer-address/deref length:offset)
+;?     (print-primitive-to-host (("len: " literal))) ;? 1
+;?     (print-primitive-to-host max:integer) ;? 1
+;?     (print-primitive-to-host (("\n" literal))) ;? 1
     { begin
       (done?:boolean <- greater-or-equal i:integer max:integer)
       (break-if done?:boolean)
@@ -2120,9 +2123,11 @@
       (curr:tagged-value <- save-type c:character)
 ;?       ($dump-channel 1093:literal) ;? 1
 ;?       ($start-tracing) ;? 1
-;?       (print-primitive-to-host (("print: " literal))) ;? 1
+;?       (print-primitive-to-host (("bufferout: " literal))) ;? 2
 ;?       (print-primitive-to-host c:character) ;? 1
-;?       (print-primitive-to-host (("\n" literal))) ;? 1
+;?       (x:integer <- character-to-integer c:character) ;? 1
+;?       (print-primitive-to-host x:integer) ;? 1
+;?       (print-primitive-to-host (("\n" literal))) ;? 2
       (buffered-stdin:channel-address/deref <- write buffered-stdin:channel-address curr:tagged-value)
 ;?       ($stop-tracing) ;? 1
 ;?       ($dump-channel 1093:literal) ;? 1
@@ -2372,11 +2377,19 @@
   (default-space:space-address <- new space:literal 30:literal)
   (screen:terminal-address <- next-input)
   (stdout:channel-address <- next-input)
+;?   (i:integer <- copy 0:literal) ;? 1
   { begin
     (x:tagged-value stdout:channel-address/deref <- read stdout:channel-address)
     (c:character <- maybe-coerce x:tagged-value character:literal)
     (done?:boolean <- equal c:character ((#\null literal)))
     (break-if done?:boolean)
+;?     (print-primitive-to-host (("printing " literal))) ;? 1
+;?     (print-primitive-to-host i:integer) ;? 1
+;?     (print-primitive-to-host ((" -- " literal))) ;? 1
+;?     (x:integer <- character-to-integer c:character) ;? 1
+;?     (print-primitive-to-host x:integer) ;? 1
+;?     (print-primitive-to-host (("\n" literal))) ;? 1
+;?     (i:integer <- add i:integer 1:literal) ;? 1
     (print-character screen:terminal-address c:character)
     (loop)
   }
diff --git a/mu.arc.t b/mu.arc.t
index 4409d70e..f2bbd7f3 100644
--- a/mu.arc.t
+++ b/mu.arc.t
@@ -4352,6 +4352,42 @@
   (prn "F - 'buffer-stdin' prints lines to screen"))
 
 (reset)
+(new-trace "print-buffered-contents-right-at-newline")
+(add-code
+  '((function main [
+      (default-space:space-address <- new space:literal 30:literal)
+      (s:string-address <- new "foo\n")
+      (k:keyboard-address <- init-keyboard s:string-address)
+      (stdin:channel-address <- init-channel 1:literal)
+      (fork send-keys-to-stdin:fn nil:literal/globals nil:literal/limit k:keyboard-address stdin:channel-address)
+      (buffered-stdin:channel-address <- init-channel 1:literal)
+      (r:integer/routine <- fork buffer-stdin:fn nil:literal/globals nil:literal/limit stdin:channel-address buffered-stdin:channel-address)
+      (screen:terminal-address <- init-fake-terminal 20:literal 10:literal)
+      (5:string-address/raw <- get screen:terminal-address/deref data:offset)
+      (fork-helper send-prints-to-stdout:fn nil:literal/globals nil:literal/limit screen:terminal-address buffered-stdin:channel-address)
+      (sleep until-routine-done:literal r:integer/routine)
+      ; hack: give helper some time to finish printing
+      (sleep for-some-cycles:literal 500:literal)
+    ])))
+;? (= dump-trace* (obj whitelist '("schedule" "run"))) ;? 1
+(run 'main)
+(each routine completed-routines*
+  (awhen rep.routine!error
+    (prn "error - " it)))
+(when (~memory-contains-array memory*.5
+          (+ "foo\n                "
+             "                    "
+             "                    "
+             "                    "
+             "                    "
+             "                    "
+             "                    "
+             "                    "
+             "                    "
+             "                    "))
+  (prn "F - 'buffer-stdin' prints lines to screen immediately on newline"))
+
+(reset)
 (new-trace "buffered-contents-skip-backspace")
 (add-code
   '((function main [
@@ -4390,7 +4426,7 @@
 (add-code
   '((function main [
       (default-space:space-address <- new space:literal 30:literal)
-      (s:string-address <- new "a\b\bfoo\nbar")
+      (s:string-address <- new "a\b\bfoo\n")
       (k:keyboard-address <- init-keyboard s:string-address)
       (stdin:channel-address <- init-channel 1:literal)
       (fork send-keys-to-stdin:fn nil:literal/globals nil:literal/limit k:keyboard-address stdin:channel-address)
@@ -4400,6 +4436,8 @@
       (5:string-address/raw <- get screen:terminal-address/deref data:offset)
       (fork-helper send-prints-to-stdout:fn nil:literal/globals nil:literal/limit screen:terminal-address buffered-stdin:channel-address)
       (sleep until-routine-done:literal r:integer/routine)
+      ; hack: give helper some time to finish printing
+      (sleep for-some-cycles:literal 500:literal)
     ])))
 ;? (= dump-trace* (obj whitelist '("schedule" "run"))) ;? 1
 (run 'main)