~ubuntu-branches/ubuntu/wily/julia/wily

« back to all changes in this revision

Viewing changes to src/interpreter.c

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot
  • Date: 2013-01-16 12:29:42 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20130116122942-x86e42akjq31repw
Tags: 0.0.0+20130107.gitd9656f41-1
* New upstream snashot
* No longer try to rebuild helpdb.jl.
   + debian/rules: remove helpdb.jl from build-arch rule
   + debian/control: move back python-sphinx to Build-Depends-Indep
* debian/copyright: reflect upstream changes
* Add Build-Conflicts on libatlas3-base (makes linalg tests fail)
* debian/rules: replace obsolete USE_DEBIAN makeflag by a list of
  USE_SYSTEM_* flags
* debian/rules: on non-x86 systems, use libm instead of openlibm
* dpkg-buildflags.patch: remove patch, applied upstream
* Refreshed other patches

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
static jl_value_t *do_call(jl_function_t *f, jl_value_t **args, size_t nargs,
47
47
                           jl_value_t **locals, size_t nl)
48
48
{
49
 
    jl_value_t **argv = alloca((nargs+1) * sizeof(jl_value_t*));
 
49
    jl_value_t **argv;
 
50
    JL_GC_PUSHARGS(argv, nargs+1);
50
51
    size_t i;
51
52
    argv[0] = (jl_value_t*)f;
52
53
    for(i=1; i < nargs+1; i++) argv[i] = NULL;
53
 
    JL_GC_PUSHARGS(argv, nargs+1);
54
54
    for(i=0; i < nargs; i++)
55
55
        argv[i+1] = eval(args[i], locals, nl);
56
56
    jl_value_t *result = jl_apply(f, &argv[1], nargs);
122
122
        if (!jl_is_func(f))
123
123
            jl_type_error("apply", (jl_value_t*)jl_function_type,
124
124
                          (jl_value_t*)f);
125
 
        return do_call(f, &args[1], ex->args->length-1, locals, nl);
 
125
        return do_call(f, &args[1], jl_array_len(ex->args)-1, locals, nl);
126
126
    }
127
127
    else if (ex->head == assign_sym) {
128
128
        jl_value_t *sym = args[0];
195
195
    else if (ex->head == global_sym) {
196
196
        // create uninitialized mutable binding for "global x" decl
197
197
        // TODO: handle type decls
198
 
        for (size_t i=0; i < ex->args->length; i++) {
 
198
        for (size_t i=0; i < jl_array_len(ex->args); i++) {
199
199
            assert(jl_is_symbol(args[i]));
200
200
            jl_get_binding_wr(jl_current_module, (jl_sym_t*)args[i]);
201
201
        }
291
291
{
292
292
    size_t j;
293
293
    long ltgt = jl_unbox_long(tgt);
294
 
    for(j=0; j < stmts->length; j++) {
 
294
    for(j=0; j < stmts->nrows; j++) {
295
295
        jl_value_t *l = jl_cellref(stmts,j);
296
296
        if (jl_is_labelnode(l) && jl_labelnode_label(l)==ltgt)
297
297
            break;
298
298
    }
299
 
    assert(j < stmts->length);
 
299
    assert(j < stmts->nrows);
300
300
    return j;
301
301
}
302
302
 
360
360
    jl_expr_t *ast = (jl_expr_t*)lam->ast;
361
361
    jl_array_t *stmts = jl_lam_body(ast)->args;
362
362
    jl_array_t *l = jl_lam_locals(ast);
 
363
    size_t llength = jl_array_len(l);
363
364
    jl_value_t **names = &((jl_value_t**)l->data)[0];
364
 
    nl += l->length;
365
 
    jl_value_t **locals = (jl_value_t**)alloca(nl*2*sizeof(void*));
 
365
    nl += llength;
 
366
    jl_value_t **locals;
 
367
    JL_GC_PUSHARGS(locals, nl*2);
366
368
    jl_value_t *r = (jl_value_t*)jl_null;
367
369
    size_t i=0;
368
 
    for(i=0; i < l->length; i++) {
 
370
    for(i=0; i < llength; i++) {
369
371
        locals[i*2]   = names[i];
370
372
        locals[i*2+1] = NULL;
371
373
    }
372
374
    for(; i < nl; i++) {
373
 
        locals[i*2]   = loc[(i-l->length)*2];
374
 
        locals[i*2+1] = loc[(i-l->length)*2+1];
 
375
        locals[i*2]   = loc[(i-llength)*2];
 
376
        locals[i*2+1] = loc[(i-llength)*2+1];
375
377
    }
376
 
    JL_GC_PUSHARGS(locals, nl*2);
377
378
    r = eval_body(stmts, locals, nl, 0);
378
379
    JL_GC_POP();
379
380
    return r;