示例#1
0
文件: precompile.c 项目: KDr2/julia
static int precompile_enq_specialization_(jl_typemap_entry_t *l, void *closure)
{
    jl_method_instance_t *mi = l->func.linfo;
    assert(jl_is_method_instance(mi));
    jl_code_instance_t *codeinst = mi->cache;
    while (codeinst) {
        int do_compile = 0;
        if (codeinst->functionObjectsDecls.functionObject == NULL && codeinst->invoke != jl_fptr_const_return) {
            if (codeinst->inferred && codeinst->inferred != jl_nothing &&
                jl_ast_flag_inferred((jl_array_t*)codeinst->inferred) &&
                !jl_ast_flag_inlineable((jl_array_t*)codeinst->inferred)) {
                do_compile = 1;
            }
            else if (codeinst->invoke != NULL) {
                do_compile = 1;
            }
        }
        if (do_compile) {
            jl_array_ptr_1d_push((jl_array_t*)closure, (jl_value_t*)mi);
            return 1;
        }
        codeinst = codeinst->next;
    }
    return 1;
}
示例#2
0
static int precompile_enq_specialization_(jl_typemap_entry_t *l, void *closure)
{
    if (jl_is_method_instance(l->func.value) &&
            l->func.linfo->functionObjectsDecls.functionObject == NULL &&
            l->func.linfo->invoke != jl_fptr_const_return &&
            (l->func.linfo->invoke != jl_fptr_trampoline ||
             (l->func.linfo->inferred &&
              l->func.linfo->inferred != jl_nothing &&
              jl_ast_flag_inferred((jl_array_t*)l->func.linfo->inferred) &&
              !jl_ast_flag_inlineable((jl_array_t*)l->func.linfo->inferred))))
        jl_array_ptr_1d_push((jl_array_t*)closure, (jl_value_t*)l->sig);
    return 1;
}