about summary refs log tree commit diff stats
path: root/archive/1.vm/059to_text.mu
diff options
context:
space:
mode:
Diffstat (limited to 'archive/1.vm/059to_text.mu')
-rw-r--r--archive/1.vm/059to_text.mu48
1 files changed, 48 insertions, 0 deletions
diff --git a/archive/1.vm/059to_text.mu b/archive/1.vm/059to_text.mu
new file mode 100644
index 00000000..d45afb0a
--- /dev/null
+++ b/archive/1.vm/059to_text.mu
@@ -0,0 +1,48 @@
+# A couple of variants of 'to-text' that we'll use implicitly in stashes (see
+# later layers).
+#
+# Mu code might specialize them to be smarter, but I don't anticipate any need
+# beyond specializing 'to-text' itself.
+
+# 'shorter' variant of to-text, when you want to enable some sort of trimming
+# define it to be identical to 'to-text' by default
+def to-text-line x:_elem -> y:text [
+  local-scope
+  load-inputs
+  y <- to-text x
+]
+
+# variant for arrays (since we can't pass them around otherwise)
+def array-to-text-line x:&:@:_elem -> y:text [
+  local-scope
+  load-inputs
+  y <- to-text *x
+]
+
+scenario to-text-line-early-warning-for-static-dispatch [
+  x:text <- to-text-line 34
+  # just ensure there were no errors
+]
+
+scenario array-to-text-line-early-warning-for-static-dispatch [
+  n:&:@:num <- new number:type, 3
+  x:text <- array-to-text-line n
+  # just ensure there were no errors
+]
+
+# finally, a specialization for single characters
+def to-text c:char -> y:text [
+  local-scope
+  load-inputs
+  y <- new character:type, 1/capacity
+  *y <- put-index *y, 0, c
+]
+
+scenario character-to-text [
+  1:char <- copy 111/o
+  2:text <- to-text 1:char
+  3:@:char <- copy *2:text
+  memory-should-contain [
+    3:array:character <- [o]
+  ]
+]