コード例 #1
0
ファイル: interpreter.c プロジェクト: dpsanders/julia
static jl_value_t *do_call(jl_value_t **args, size_t nargs, interpreter_state *s)
{
    jl_value_t **argv;
    JL_GC_PUSHARGS(argv, nargs);
    size_t i;
    for(i=0; i < nargs; i++)
        argv[i] = eval(args[i], s);
    jl_value_t *result = jl_apply_generic(argv, nargs);
    JL_GC_POP();
    return result;
}
コード例 #2
0
ファイル: interpreter.c プロジェクト: ArchRobison/julia
static jl_value_t *do_call(jl_value_t **args, size_t nargs,
                           jl_value_t **locals, size_t nl, size_t ngensym)
{
    jl_value_t **argv;
    JL_GC_PUSHARGS(argv, nargs);
    size_t i;
    for(i=0; i < nargs; i++)
        argv[i] = eval(args[i], locals, nl, ngensym);
    jl_value_t *result = jl_apply_generic(argv, nargs);
    JL_GC_POP();
    return result;
}
コード例 #3
0
ファイル: rtutils.c プロジェクト: MatthiasJReisinger/julia
// perform f(args...) on stack
JL_DLLEXPORT jl_value_t *jl_apply_2va(jl_value_t *f, jl_value_t **args, uint32_t nargs)
{
    nargs++;
    int onstack = (nargs < jl_page_size/sizeof(jl_value_t*));
    jl_value_t **newargs;
    JL_GC_PUSHARGS(newargs, onstack ? nargs : 1);
    jl_svec_t *arg_heap = NULL;
    newargs[0] = f;  // make sure f is rooted
    if (!onstack) {
        arg_heap = jl_alloc_svec(nargs);
        newargs[0] = (jl_value_t*)arg_heap;
        newargs = jl_svec_data(arg_heap);
        newargs[0] = f;
    }
    memcpy(&newargs[1], args, (nargs-1)*sizeof(jl_value_t*));
    jl_value_t *ret = jl_apply_generic(newargs, nargs);
    JL_GC_POP();
    return ret;
}