void jl_typemap_rehash(union jl_typemap_t ml, int8_t offs) { if (jl_typeof(ml.unknown) == (jl_value_t*)jl_typemap_level_type) { if (ml.node->targ.values != (void*)jl_nothing) jl_typemap_rehash_array(&ml.node->targ, ml.unknown, 1, offs); if (ml.node->arg1.values != (void*)jl_nothing) jl_typemap_rehash_array(&ml.node->arg1, ml.unknown, 0, offs); jl_typemap_rehash(ml.node->any, offs+1); } }
void jl_typemap_rehash_array(struct jl_ordereddict_t *pa, jl_value_t *parent, int8_t tparam, int8_t offs) { size_t i, len = jl_array_len(pa->values); for (i = 0; i < len; i++) { union jl_typemap_t ml; ml.unknown = jl_array_ptr_ref(pa->values, i); assert(ml.unknown != NULL); jl_typemap_rehash(ml, offs+1); } mtcache_rehash(pa, 4 * next_power_of_two(len), parent, tparam, offs); }
void jl_typemap_rehash_array(jl_array_t **pa, jl_value_t *parent, int8_t tparam, int8_t offs) { size_t i, len = (*pa)->nrows; for (i = 0; i < len; i++) { union jl_typemap_t ml; ml.unknown = jl_array_ptr_ref(*pa, i); assert(ml.unknown != NULL); jl_typemap_rehash(ml, offs+1); } mtcache_rehash(pa, parent, tparam, offs); }