示例#1
0
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);
    }
}
示例#2
0
文件: typemap.c 项目: DrGar/julia
// 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;
}