int jl_typemap_visitor(union jl_typemap_t cache, jl_typemap_visitor_fptr fptr, void *closure) { if (jl_typeof(cache.unknown) == (jl_value_t*)jl_typemap_level_type) { if (cache.node->targ.values != (void*)jl_nothing) if (!jl_typemap_array_visitor(&cache.node->targ, fptr, closure)) return 0; if (cache.node->arg1.values != (void*)jl_nothing) if (!jl_typemap_array_visitor(&cache.node->arg1, fptr, closure)) return 0; if (!jl_typemap_node_visitor(cache.node->linear, fptr, closure)) return 0; return jl_typemap_visitor(cache.node->any, fptr, closure); } else { return jl_typemap_node_visitor(cache.leaf, fptr, closure); } }
// calls fptr on each jl_typemap_entry_t in cache in sort order, until fptr return false int jl_typemap_visitor(union jl_typemap_t cache, jl_typemap_visitor_fptr fptr, void *closure) { jl_typemap_entry_t *ml; if (jl_typeof(cache.unknown) == (jl_value_t*)jl_typemap_level_type) { if (cache.node->targ != (void*)jl_nothing) if (!jl_typemap_array_visitor(cache.node->targ, fptr, closure)) return 0; if (cache.node->arg1 != (void*)jl_nothing) if (!jl_typemap_array_visitor(cache.node->arg1, fptr, closure)) return 0; ml = cache.node->linear; } else { ml = cache.leaf; } while (ml != (void*)jl_nothing) { if (!fptr(ml, closure)) return 0; ml = ml->next; } return 1; }