2 #include "rust_internal.h"
6 rust_crate_cache::get_type_desc(size_t size,
9 type_desc const **descs,
10 uintptr_t n_obj_params)
12 I(sched, n_descs > 1);
14 size_t keysz = n_descs * sizeof(type_desc*);
15 HASH_FIND(hh, this->type_descs, descs, keysz, td);
17 DLOG(sched, cache, "rust_crate_cache::get_type_desc hit");
19 // FIXME: This is a gross hack.
20 td->n_obj_params = std::max(td->n_obj_params, n_obj_params);
24 DLOG(sched, cache, "rust_crate_cache::get_type_desc miss");
25 td = (type_desc*) sched->kernel->malloc(sizeof(type_desc) + keysz,
26 "crate cache typedesc");
29 // By convention, desc 0 is the root descriptor.
30 // but we ignore the size and alignment of it and use the
31 // passed-in, computed values.
32 memcpy(td, descs[0], sizeof(type_desc));
33 td->first_param = &td->descs[1];
36 for (size_t i = 0; i < n_descs; ++i) {
38 "rust_crate_cache::descs[%" PRIdPTR "] = 0x%" PRIxPTR,
40 td->descs[i] = descs[i];
42 td->n_obj_params = n_obj_params;
43 td->n_params = n_descs - 1;
44 HASH_ADD(hh, this->type_descs, descs, keysz, td);
48 rust_crate_cache::rust_crate_cache(rust_scheduler *sched)
56 rust_crate_cache::flush() {
57 DLOG(sched, cache, "rust_crate_cache::flush()");
60 type_desc *d = type_descs;
61 HASH_DEL(type_descs, d);
62 DLOG(sched, mem, "rust_crate_cache::flush() tydesc %" PRIxPTR, d);
63 sched->kernel->free(d);
67 rust_crate_cache::~rust_crate_cache()
76 // indent-tabs-mode: nil
78 // buffer-file-coding-system: utf-8-unix
79 // compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";