Esempio n. 1
0
static void
_ejs_generator_start(EJSGenerator* gen)
{
    _ejs_gc_push_generator(gen);
    _ejs_invoke_closure(gen->body, _ejs_undefined, 0, NULL);
    _ejs_gc_pop_generator();

    gen->yielded_value = _ejs_create_iter_result(_ejs_undefined, _ejs_true);
}
Esempio n. 2
0
ejsval
_ejs_generator_yield (ejsval generator, ejsval arg) {
    EJSGenerator* gen = (EJSGenerator*)EJSVAL_TO_OBJECT(generator);
    gen->yielded_value = _ejs_create_iter_result(arg, _ejs_false);
    gen->sent_value = _ejs_undefined;

    _ejs_gc_pop_generator();
    swapcontext(&gen->generator_context, &gen->caller_context);
    _ejs_gc_push_generator(gen);

    if (gen->throwing) {
        gen->throwing = EJS_FALSE;
        _ejs_throw (gen->sent_value);
    }

    return gen->sent_value;
}