+/* localref_check_uncleared ****************************************************
+
+ Checks the topmost local reference table for uncleared references.
+
+*******************************************************************************/
+
+#if !defined(NDEBUG)
+static bool localref_check_uncleared()
+{
+ localref_table *lrt;
+ int32_t localframes;
+ int32_t lrt_uncleared;
+ int32_t lrt_used;
+ int i;
+
+ /* get current local reference table from thread */
+
+ lrt = LOCALREFTABLE;
+ assert(lrt != NULL);
+ assert(lrt->localframes > 0);
+
+ localframes = lrt->localframes;
+ lrt_uncleared = 0;
+ lrt_used = 0;
+
+ for (; localframes > 0; localframes--) {
+ lrt_used += lrt->used;
+
+ for (i = 0; i < lrt->capacity; i++) {
+ if (lrt->refs[i] != NULL)
+ lrt_uncleared++;
+ }
+
+ lrt = lrt->prev;
+ }
+
+ if (lrt_uncleared != lrt_used) {
+ localref_dump();
+ vm_abort("localref_check_uncleared: (uncleared=%d) != (used=%d)", lrt_uncleared, lrt_used);
+ }
+
+ if (lrt_uncleared <= 1)
+ return true;
+ else {
+ /*log_println("localref_check_uncleared: %d uncleared local references", lrt_uncleared);*/
+ return false;
+ }
+}
+#endif
+
+