3 (func $checkpoint_user_memory
4 (global.set $mem_user_start (global.get $mem_unused_start))
5 (global.set $string_mem_user_start (global.get $string_mem_next))
8 (func $CHECK_FREE_LIST (result i32)
11 (i32.mul (global.get $mem_free_list) 4))
18 (i32.add (global.get $mem)
19 (i32.mul (global.get $mem_unused_start)
21 (local.set $count (i32.add $count ($MalVal_size $first)))
22 (local.set $first (i32.add (global.get $mem) (i32.mul 4 ($VAL0 $first))))
29 (func $PR_MEMORY_SUMMARY_SMALL
30 (LET $free (i32.sub (global.get $MEM_SIZE)
31 (i32.mul (global.get $mem_unused_start) 4))
32 $free_list_count ($CHECK_FREE_LIST)
38 (br_if $done (i32.ge_s $mv (i32.add
40 (i32.mul (global.get $mem_unused_start)
42 (if (i32.ne ($TYPE $mv) (global.get $FREE_T))
43 (local.set $mem_ref_count (i32.add $mem_ref_count
47 (local.set $mv (i32.add $mv (i32.mul 4 ($MalVal_size $mv))))
52 ($printf_3 "Free: %d, Values: %d (refs: %d), Emptys: "
55 (i32.sub (global.get $mem_unused_start) 1)
58 (local.set $mv (global.get $NIL))
61 (br_if $done (i32.gt_s $mv (global.get $TRUE)))
62 ($printf_1 "%d," (i32.div_s (i32.load $mv) 32))
63 (local.set $mv (i32.add $mv 8))
67 (local.set $mv (global.get $EMPTY_LIST))
70 (br_if $done (i32.gt_s $mv (global.get $EMPTY_HASHMAP)))
71 ($printf_1 "%d," (i32.div_s (i32.load $mv) 32))
72 (local.set $mv (i32.add $mv 12))
79 (func $PR_VALUE (param $fmt i32 $mv i32)
80 (LET $temp ($pr_str $mv 1))
81 ($printf_1 $fmt ($to_String $temp))
85 (func $PR_MEMORY_VALUE (param $idx i32) (result i32)
87 (LET $mv ($MalVal_ptr $idx)
89 $size ($MalVal_size $mv)
90 $val0 ($MalVal_val $idx 0))
92 ($printf_2 "%4d: type %2d" $idx $type)
95 (then ($printf_1 ", size %2d" $size))
96 (else ($printf_1 ", refs %2d" ($REFS $mv))))
98 (if (OR (i32.eq $type (global.get $STRING_T))
99 (i32.eq $type (global.get $SYMBOL_T)))
100 ;; for strings/symbolx pointers, print hex values
101 (then ($printf_2 " [%4d|%3ds" ($MalVal_refcnt_type $idx) $val0))
102 (else ($printf_2 " [%4d|%4d" ($MalVal_refcnt_type $idx) $val0)))
106 ($print "|----|----]"))
108 ($printf_1 "|%4d" ($MalVal_val $idx 1))
110 (then ($print "|----]"))
111 (else ($printf_1 "|%4d]" ($MalVal_val $idx 2))))))
116 (block $done (block $unknown
117 (block (block (block (block (block (block (block (block
118 (block (block (block (block (block (block (block (block
119 (br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
132 ($printf_1 "%d" $val0)
135 ($print " *** GOT FLOAT *** ")
138 ($printf_1 "'%s'" ($to_String $mv))
141 ($print ($to_String $mv))
144 (if (i32.le_u $mv (global.get $EMPTY_HASHMAP))
148 ;;; printf("(... %d ...), next: %d\n", mv->val[1], mv->val[0])
149 ($printf_2 "(... %d ...), next: %d"
151 ($MalVal_val $idx 0))))
154 (if (i32.le_u $mv (global.get $EMPTY_HASHMAP))
158 ;;; printf("[... %d ...], next: %d\n", mv->val[1], mv->val[0])val
159 ($printf_2 "[... %d ...], next: %d"
161 ($MalVal_val $idx 0))))
164 (if (i32.le_u $mv (global.get $EMPTY_HASHMAP))
168 ;;; printf("{... '%s'(%d) : %d ...}\n",
169 ;; to_String(mem + mv->val[1]), mv->val[1], mv->val[2])
170 ($printf_3 "{... '%s'(%d) : %d ...}"
171 ($to_String ($MalVal_ptr ($MalVal_val $idx 1)))
173 ($MalVal_val $idx 2))))
179 ($print "mal function")
188 ($print "environment")
194 ($printf_1 "FREE next: 0x%x" $val0)
195 (if (i32.eq $idx (global.get $mem_free_list))
196 ($print " (free start)"))
197 (if (i32.eq $val0 (global.get $mem_unused_start))
198 ($print " (free end)"))
209 (func $PR_STRINGS (param $start i32)
212 ($printf_2 "String - showing %d -> %d:\n"
213 $start (i32.sub (global.get $string_mem_next)
214 (global.get $string_mem)))
215 (if (i32.le_s (i32.sub (global.get $string_mem_next)
216 (global.get $string_mem))
218 (then ($print " ---\n"))
220 (local.set $ms (global.get $string_mem))
223 (br_if $done (i32.ge_u $ms (global.get $string_mem_next)))
224 (local.set $idx (i32.sub $ms (global.get $string_mem)))
225 (if (i32.ge_s $idx $start)
226 ($printf_4 "%4d: refs %2d, size %2d >> '%s'\n"
229 (i32.load16_u (i32.add $ms 2))
232 (local.set $ms (i32.add $ms (i32.load16_u (i32.add $ms 2))))
238 (func $PR_MEMORY (param $start i32 $end i32)
241 (if (i32.lt_s $start 0)
243 (local.set $start (global.get $mem_user_start))
244 (local.set $string_start (i32.sub (global.get $string_mem_user_start)
245 (global.get $string_mem)))))
246 (if (i32.lt_s $end 0)
247 (local.set $end (global.get $mem_unused_start)))
248 ;;; printf("Values - (mem) showing %d -> %d", start, end)
249 ;;; printf(" (unused start: %d, free list: %d):\n",
250 ;;; mem_unused_start, mem_free_list)
251 ($printf_4 "Values - (mem) showing 0x%x -> 0x%x (unused start: 0x%x, free list: 0x%x):\n"
254 (global.get $mem_unused_start)
255 (global.get $mem_free_list))
257 (if (i32.le_s $end $start)
260 (local.set $end (global.get $mem_unused_start)))
262 (local.set $idx $start)
263 ;;; while (idx < end)
264 (block $loopvals_exit
266 (br_if $loopvals_exit (i32.ge_s $idx $end))
267 (local.set $idx ($PR_MEMORY_VALUE $idx))
271 ($PR_STRINGS $string_start)
272 ($PR_MEMORY_SUMMARY_SMALL)
275 (func $PR_MEMORY_RAW (param $start i32 $end i32)
278 (br_if $loop_exit (i32.ge_u $start $end))
279 ($printf_2 "0x%x 0x%x\n" $start (i32.load $start))
280 (local.set $start (i32.add 4 $start))