ref: 9277a221708b1546518f8ee467e38c0ef7239d77
parent: 48a34d1eb8df3def243689c0c5be2d5b3000a90c
author: Lennart Augustsson <lennart@augustsson.net>
date: Sun Apr 7 17:00:58 EDT 2024
Add missing find_sharing for arrays.
--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -1800,7 +1800,8 @@
}
if (n < cells || n >= cells + heap_size) abort();
//PRINT("find_sharing %p %llu ", n, LABEL(n));- if (GETTAG(n) == T_AP) {+ tag_t tag = GETTAG(n);
+ if (tag == T_AP || tag == T_ARR) { if (test_bit(shared_bits, n)) {/* Alread marked as shared */
//PRINT("shared\n");@@ -1814,9 +1815,15 @@
/* Mark as visited, and recurse */
//PRINT("unmarked\n");set_bit(marked_bits, n);
- find_sharing(FUN(n));
- n = ARG(n);
- goto top;
+ if (tag == T_AP) {+ find_sharing(FUN(n));
+ n = ARG(n);
+ goto top;
+ } else {+ for(size_t i = 0; i < ARR(n)->size; i++) {+ find_sharing(ARR(n)->array[i]);
+ }
+ }
}
} else {/* Not an application, so do nothing */
--
⑨