Exemple #1
0
/* :nodoc: */
static VALUE
yielder_yield(VALUE obj, VALUE args)
{
    struct yielder *ptr = yielder_ptr(obj);

    return rb_proc_call(ptr->proc, args);
}
Exemple #2
0
static duk_ret_t ctx_call_pushed_function(duk_context *ctx) {
  VALUE block; // the block to yield
  struct state *state;
  int nargs = duk_get_top(ctx); // number of arguments of the block (arity)
  VALUE args = rb_ary_new(); // the block to yield needs an array of arguments
  VALUE result; // the result returned by yielding the block

  duk_push_current_function(ctx);

  // get the block which is a property of the pushed function
  duk_get_prop_string(ctx, -1, "block");
  block = (VALUE) duk_get_pointer(ctx, -1);
  duk_pop(ctx);

  // get the state so that we don't need to a create a new one
  duk_get_prop_string(ctx, -1, "state");
  state = (struct state *) duk_get_pointer(ctx, -1);
  duk_pop(ctx);

  // before pushing each argument to the array, each one needs to be converted into a ruby value
  for (int i = 0; i < nargs; i++)
    rb_ary_push(args, ctx_stack_to_value(state, i));

  result = rb_proc_call(block, args); // yield
  ctx_push_ruby_object(state, result);

  return 1;
}
static VALUE
proc_call(VALUE proc, VALUE args)
{
    if (TYPE(args) != T_ARRAY) {
	args = rb_ary_new3(1, args);
    }
    return rb_proc_call(proc, args);
}
void rb_parser_callback_call(VALUE self, const char *name, char *data, size_t length) {
    VALUE callback = rb_hash_aref(rb_iv_get(self, "@callbacks"), ID2SYM(rb_intern(name)));
    if (!NIL_P(callback)) {
        VALUE args = rb_ary_new();
        if (data)
            rb_ary_push(args, rb_str_new(data, length));
        rb_proc_call(callback, args);
    }
}
Exemple #5
0
static int php_ub_write(const char *str, unsigned int str_length TSRMLS_DC)
{
    if (!NIL_P(callback_output)) {
        VALUE args = rb_ary_new();
        rb_ary_push(args, rb_str_new(str, str_length));
        rb_proc_call(callback_output, args);
    }
    return str_length;
}
Exemple #6
0
/* :nodoc: */
static VALUE
generator_each(VALUE obj)
{
    struct generator *ptr = generator_ptr(obj);
    VALUE yielder;

    yielder = yielder_new();

    return rb_proc_call(ptr->proc, rb_ary_new3(1, yielder));
}
Exemple #7
0
/* :nodoc: */
static VALUE
generator_each(int argc, VALUE *argv, VALUE obj)
{
    struct generator *ptr = generator_ptr(obj);
    VALUE args = rb_ary_new2(argc + 1);

    rb_ary_push(args, yielder_new());
    if (argc > 0) {
	rb_ary_cat(args, argv, argc);
    }

    return rb_proc_call(ptr->proc, args);
}
Exemple #8
0
static VALUE
bug_proc_call_super(RB_BLOCK_CALL_FUNC_ARGLIST(yieldarg, procarg))
{
    VALUE args[2];
    VALUE ret;
    args[0] = yieldarg;
    args[1] = procarg;
    ret = rb_call_super(2, args);
    if (!NIL_P(blockarg)) {
	ret = rb_proc_call(blockarg, ret);
    }
    return ret;
}
static 
void call_expr_userfnc (ABSTRACT_CALLER* callback_state, ABSTRACT_ARGLIST* arglist, ABSTRACT_USERFUNC* hashvalptr, ABSTRACT_EXPRVAL* exprval) {
    char* empty = "";
    VALUE self = (VALUE)callback_state;
    VALUE func = (VALUE)hashvalptr;
    VALUE args = (VALUE)arglist;
    PSTRING retvalpstr = { empty, empty };

    if (hashvalptr==NULL) {
        rb_raise(rb_eRuntimeError, "FATAL INTERNAL ERROR:Call_EXPR:function called but not exists");
        tmplpro_set_expr_as_pstring(exprval, retvalpstr);
        return;
    } else if (NIL_P(func) || !rb_obj_is_kind_of(func, rb_cProc)) {
        rb_raise(rb_eRuntimeError, "FATAL INTERNAL ERROR:Call_EXPR:not a Proc object");
        tmplpro_set_expr_as_pstring(exprval, retvalpstr);
        return;
    }

    /* head of args is not a true aruguments(it is a regisotry of args). */
    VALUE tmp = rb_ary_shift(args);
    VALUE retval = rb_proc_call(func, args);
    rb_ary_unshift(args, tmp);

    VALUE registory = Qnil;

    switch (TYPE(retval)) {
    case T_FIXNUM:
	tmplpro_set_expr_as_int64(exprval, FIX2LONG(retval));
        break;
    case T_TRUE:
	tmplpro_set_expr_as_int64(exprval, 1);
        break;
    case T_FALSE:
	tmplpro_set_expr_as_int64(exprval, 0);
        break;
    case T_FLOAT:
        tmplpro_set_expr_as_double(exprval, NUM2DBL(retval));
        break;
    case T_NIL:
        tmplpro_set_expr_as_null(exprval);
        break;
    default:
        registory = rb_ivar_get(self, rb_intern("@internal_expr_results"));
        rb_ary_push(registory, retval);
        retvalpstr.begin = StringValuePtr(retval);
	retvalpstr.endnext = retvalpstr.begin + RSTRING_LEN(retval);
	tmplpro_set_expr_as_pstring(exprval, retvalpstr);
    }

    return;
}
static
int is_ABSTRACT_VALUE_true_impl (ABSTRACT_DATASTATE *none, ABSTRACT_VALUE* valptr) {
    VALUE val = (VALUE)valptr;

    if (NIL_P(val)) return 0;

    if (rb_obj_is_kind_of(val, rb_cProc)) {
        val = rb_proc_call(val, rb_ary_new());
    }

    if (NIL_P(val) || TYPE(val) == T_FALSE) return 0;

    return 1;
}
Exemple #11
0
static VALUE
enumerator_size(VALUE obj)
{
    struct enumerator *e = enumerator_ptr(obj);

    if (e->size_fn) {
	return (*e->size_fn)(e->obj, e->args, obj);
    }
    if (rb_obj_is_proc(e->size)) {
        if (e->args)
	    return rb_proc_call(e->size, e->args);
        else
            return rb_proc_call_with_block(e->size, 0, 0, Qnil);
    }
    return e->size;
}
Exemple #12
0
static VALUE
curry(VALUE dummy, VALUE args, int argc, VALUE *argv)
{
    VALUE proc, passed, arity;
    proc = RARRAY_AT(args, 0);
    passed = RARRAY_AT(args, 1);
    arity = RARRAY_AT(args, 2);

    passed = rb_ary_plus(passed, rb_ary_new4(argc, argv));
    rb_ary_freeze(passed);
    if(RARRAY_LEN(passed) < FIX2INT(arity)) {
	arity = make_curry_proc(proc, passed, arity);
	return arity;
    }
    arity = rb_proc_call(proc, passed);
    return arity;
}
Exemple #13
0
/*
 * @api private
 */
static VALUE qml_init(VALUE module, VALUE args) {
    if (!NIL_P(rbqml_application)) {
        rb_raise(rb_eRuntimeError, "QML already initialized");
    }

    rbqml_application = rb_funcall(rbqml_cApplication, rb_intern("new"), 1, args);
    rbqml_engine = rb_funcall(rbqml_cEngine, rb_intern("new"), 0);

    rb_gc_register_address(&rbqml_application);
    rb_gc_register_address(&rbqml_engine);

    VALUE blocks = rb_const_get(module, rb_intern("INIT_BLOCKS"));
    for (int i = 0; i < RARRAY_LEN(blocks); ++i) {
        rb_proc_call(RARRAY_AREF(blocks, i), rb_ary_new());
    }

    return module;
}
static
PSTRING ABSTRACT_VALUE2PSTRING_impl (ABSTRACT_DATASTATE *none, ABSTRACT_VALUE* valptr) {
    VALUE val = (VALUE)valptr;
    PSTRING retval = {NULL,NULL};

    if (valptr == NULL) return retval;

    if (rb_obj_is_kind_of(val, rb_cProc)) {
        val = rb_proc_call(val, rb_ary_new());
    }

    if (TYPE(val) != T_STRING) {
        ID to_s = rb_intern("to_s");
        val = rb_funcall(val, to_s, 0);
    }
    retval.begin = RSTRING_PTR(val);
    retval.endnext = retval.begin + RSTRING_LEN(val);
    return retval;
}
Exemple #15
0
VALUE
protect_fs_ruby_call_func(VALUE argv){
    
    VALUE* argvs = (VALUE*)argv;
    VALUE argc_num = argvs[0];
    VALUE server_instance = argvs[1];
    ID    method_id = argvs[2];
    
    int argc = FIX2INT(argc_num);
    
    if(server_instance == Qnil){
        return Qnil;
    }
    
    
    if (argc == -1) {
        VALUE proc = (VALUE)argvs[1];
        VALUE proc_argv = LL2NUM(argvs[2]);
        VALUE proc_argvs = rb_ary_new();
        rb_ary_push(proc_argvs, proc_argv);
        rb_proc_call(proc, proc_argvs);
        rb_ary_free(proc_argvs);
    }
    
    if(argc == 0){
        rb_funcall(server_instance, method_id, argc, 0);
    }
    
    if(argc == 1){
        VALUE argv = argvs[3];
        rb_funcall(server_instance, method_id, argc, argv);
    }
    
    if(argc == 2){
        VALUE node_id = argvs[3];
        VALUE pack    = argvs[4];
        rb_funcall(server_instance, method_id, argc, node_id, pack);
    }
    
    
    return Qnil;
}
Exemple #16
0
void
rb_call_end_proc(VALUE data)
{
    rb_proc_call(data, rb_ary_new());
}