ref: 9178a59adace081f3d576cb659c28c40264737f7
parent: 1a9dd10f9d2918382b938bda9079652d6b392e0c
author: Lennart Augustsson <lennart@augustsson.net>
date: Sat Aug 31 17:42:04 EDT 2024
Share BSTR nodes.
--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -1890,7 +1890,7 @@
if (n < cells || n >= cells + heap_size) abort();
//PRINT("find_sharing %p %llu ", n, LABEL(n));tag_t tag = GETTAG(n);
- if (tag == T_AP || tag == T_ARR) {+ if (tag == T_AP || tag == T_ARR || tag == T_BSTR) { if (test_bit(pb->shared_bits, n)) {/* Alread marked as shared */
//PRINT("shared\n");@@ -1904,18 +1904,22 @@
/* Mark as visited, and recurse */
//PRINT("unmarked\n");set_bit(pb->marked_bits, n);
- if (tag == T_AP) {+ switch(tag) {+ case T_AP:
find_sharing(pb, FUN(n));
n = ARG(n);
goto top;
- } else {+ case T_ARR:
for(size_t i = 0; i < ARR(n)->size; i++) {find_sharing(pb, ARR(n)->array[i]);
}
+ break;
+ default:
+ break;
}
}
} else {- /* Not an application, so do nothing */
+ /* Not an sharable node, so do nothing */
//PRINT("not T_AP\n");;
}
--
⑨