+void**
+rust_crate_cache::get_dict(size_t n_fields, void** dict) {
+ rust_hashable_dict *found = NULL;
+ uintptr_t key = 0;
+ for (size_t i = 0; i < n_fields; ++i) key ^= (uintptr_t)dict[i];
+ size_t keysz = sizeof(uintptr_t);
+ HASH_FIND(hh, this->dicts, &key, keysz, found);
+ if (found) { printf("found!\n"); return &(found->fields[0]); }
+ printf("not found\n");
+ size_t dictsz = n_fields * sizeof(void*);
+ found = (rust_hashable_dict*)
+ sched->kernel->malloc(keysz + sizeof(UT_hash_handle) + dictsz,
+ "crate cache dict");
+ if (!found) return NULL;
+ found->key = key;
+ void** retptr = &(found->fields[0]);
+ memcpy(retptr, dict, dictsz);
+ HASH_ADD(hh, this->dicts, key, keysz, found);
+ return retptr;
+}
+