3 (global $printer_buf (mut i32) 0)
5 (func $pr_str_val (param $res i32 $mv i32 $print_readably i32) (result i32)
13 (block (block (block (block (block (block (block (block
14 (block (block (block (block (block (block (block (block
15 (br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $type))
17 ($memmove $res "nil" 4)
18 (local.set $res (i32.add 3 $res))
24 ($memmove $res "false" 6)
25 (local.set $res (i32.add 5 $res)))
28 ($memmove $res "true" 5)
29 (local.set $res (i32.add 4 $res))))
32 (local.set $res ($sprintf_1 $res "%d" $val0))
35 (local.set $res ($sprintf_1 $res "%d" " *** GOT FLOAT *** "))
38 (local.set $sval ($to_String $mv))
39 (if (i32.eq (i32.load8_u $sval) (CHR "\x7f"))
41 (local.set $res ($sprintf_1 $res ":%s" (i32.add $sval 1))))
42 (else (if $print_readably
44 ;; escape backslashes, quotes, and newlines
45 (local.set $res ($sprintf_1 $res "\"" 0))
46 (local.set $res (i32.add $res ($REPLACE3 $res ($to_String $mv)
50 (local.set $res ($sprintf_1 $res "\"" 0)))
52 (local.set $res ($sprintf_1 $res "%s" $sval))))))
55 (local.set $res ($sprintf_1 $res "%s" ($to_String $mv)))
57 ;; 6: list, fallthrouogh
59 ;; 7: vector, fallthrough
63 $res ($sprintf_1 $res "%c"
64 (if (result i32) (i32.eq $type (global.get $LIST_T))
66 (else (if (result i32) (i32.eq $type (global.get $VECTOR_T))
70 ;;; while (VAL0(mv) != 0)
73 (br_if $done_seq (i32.eq ($VAL0 $mv) 0))
74 ;;; res = pr_str_val(res, MEM_VAL1(mv), print_readably)
75 (local.set $res ($pr_str_val $res ($MEM_VAL1_ptr $mv) $print_readably))
77 ;; if this is a hash-map, print the next element
78 (if (i32.eq $type (global.get $HASHMAP_T))
80 ;;; res += snprintf(res, 2, " ")
81 (local.set $res ($sprintf_1 $res " " 0))
82 (local.set $res ($pr_str_val $res ($MEM_VAL2_ptr $mv)
85 (local.set $mv ($MEM_VAL0_ptr $mv))
86 ;;; if (VAL0(mv) != 0)
87 (if (i32.ne ($VAL0 $mv) 0)
88 ;;; res += snprintf(res, 2, " ")
89 (local.set $res ($sprintf_1 $res " " 0)))
95 $res ($sprintf_1 $res "%c"
96 (if (result i32) (i32.eq $type (global.get $LIST_T))
98 (else (if (result i32) (i32.eq $type (global.get $VECTOR_T))
100 (else (CHR "}")))))))
103 ($memmove $res "#<fn ...>" 10)
104 (local.set $res (i32.add 9 $res))
107 ($memmove $res "(fn* " 6)
108 (local.set $res (i32.add 5 $res))
109 (local.set $res ($pr_str_val $res ($MEM_VAL1_ptr $mv) $print_readably))
110 ($memmove $res " " 2)
111 (local.set $res (i32.add 1 $res))
112 (local.set $res ($pr_str_val $res ($MEM_VAL0_ptr $mv) $print_readably))
113 ($memmove $res ")" 2)
114 (local.set $res (i32.add 1 $res))
117 ($memmove $res "#<macro ...>" 13)
118 (local.set $res (i32.add 12 $res))
121 ($memmove $res "(atom " 7)
122 (local.set $res (i32.add 6 $res))
123 (local.set $res ($pr_str_val $res ($MEM_VAL0_ptr $mv) $print_readably))
124 ($memmove $res ")" 2)
125 (local.set $res (i32.add 1 $res))
128 ($memmove $res "#<mem ...>" 11)
129 (local.set $res (i32.add 10 $res))
132 ;; recur on object itself
133 (local.set $res ($pr_str_val $res ($MEM_VAL0_ptr $mv) $print_readably))
136 ($memmove $res "#<free ...>" 12)
137 (local.set $res (i32.add 11 $res))
140 ($memmove $res "#<unknown>" 11)
141 (local.set $res (i32.add 10 $res))
147 (func $pr_str_internal (param $seq i32) (param $mv i32)
148 (param $print_readably i32) (param $sep i32) (result i32)
149 (LET $res ($STRING_INIT (global.get $STRING_T))
150 $res_str ($to_String $res))
156 (br_if $done (i32.eqz ($VAL0 $mv)))
157 (local.set $res_str ($pr_str_val $res_str ($MEM_VAL1_ptr $mv) $print_readably))
158 (local.set $mv ($MEM_VAL0_ptr $mv))
159 (if (i32.ne ($VAL0 $mv) 0)
160 (local.set $res_str ($sprintf_1 $res_str "%s" $sep)))
165 (local.set $res_str ($pr_str_val $res_str $mv $print_readably))))
167 (local.set $res ($STRING_FINALIZE $res (i32.sub $res_str ($to_String $res))))
172 (func $pr_str (param $mv i32 $print_readably i32) (result i32)
173 ($pr_str_internal 0 $mv $print_readably "")
176 (func $pr_str_seq (param $mv i32 $print_readably i32 $sep i32) (result i32)
177 ($pr_str_internal 1 $mv $print_readably $sep)
180 (export "pr_str" (func $pr_str))