Exemplo n.º 1
0
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;
}
Exemplo n.º 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->jlcall_api != 2)
        jl_array_ptr_1d_push((jl_array_t*)closure, (jl_value_t*)l->sig);
    return 1;
}
Exemplo n.º 3
0
static jl_value_t *do_invoke(jl_value_t **args, size_t nargs, interpreter_state *s)
{
    jl_value_t **argv;
    JL_GC_PUSHARGS(argv, nargs - 1);
    size_t i;
    for (i = 1; i < nargs; i++)
        argv[i - 1] = eval(args[i], s);
    jl_method_instance_t *meth = (jl_method_instance_t*)args[0];
    assert(jl_is_method_instance(meth) && !meth->inInference);
    jl_value_t *result = jl_call_method_internal(meth, argv, nargs - 1);
    JL_GC_POP();
    return result;
}
Exemplo n.º 4
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;
}