Inline-Ruby
view release on metacpan or search on metacpan
#=============================================================================
# This is called to evaluate ruby code (duh!). It uses rb_rescue to trap any
# compile errors raised by the interpreter. If an exception is thrown we
# return an undef, and set the global variable "$@".
#=============================================================================
void
my_rb_eval(str)
char* str
PREINIT:
SV* pl_retval;
PPCODE:
Printf(("About to evaluate some Ruby code:\n"));
Printf(("%s\n", str));
Printf(("__END__"));
#ifdef rb_set_errinfo
rb_set_errinfo(Qnil); /* reset GET_THREAD()->errinfo */
#endif
pl_retval = rb2pl(rb_rescue2(&my_eval_string, rb_str_new2(str),
&my_error_trap, Qnil, rb_eException, 0));
Printf(("Done.\n"));
#if defined CHECK_CONTEXT && defined FLATTEN_ARRAYS
# an optional iterator, and any arguments to the method.
#=============================================================================
#undef NUM_FIXED_ARGS
#define NUM_FIXED_ARGS 1
void
my_rb_call_function(FNAME, ...)
char* FNAME
PREINIT:
VALUE argv;
SV* pl_retval;
PPCODE:
Printf(("rb_call_function(\"%s\")\n", FNAME));
INIT_RUBY_ARGV(argv);
pl_retval = call_ruby_method(Qnil, FNAME, NULL, argv);
#if defined CHECK_CONTEXT && defined FLATTEN_ARRAYS
FLATTEN_RETVAL(pl_retval);
#else
PRESERVE_RETVAL(pl_retval);
#endif
#=============================================================================
#undef NUM_FIXED_ARGS
#define NUM_FIXED_ARGS 2
void
my_rb_call_class_method(KLASS, mname, ...)
char* KLASS
char* mname
PREINIT:
VALUE klass;
VALUE argv;
SV* pl_retval;
PPCODE:
Printf(("rb_call_class_method('%s', '%s', ...)\n",KLASS,mname));
INIT_RUBY_ARGV(argv);
klass = rb_str_new2(KLASS);
pl_retval = call_ruby_method(klass, mname, NULL, argv);
#if defined CHECK_CONTEXT && defined FLATTEN_ARRAYS
FLATTEN_RETVAL(pl_retval);
#else
PRESERVE_RETVAL(pl_retval);
#endif
#define NUM_FIXED_ARGS 2
void
my_rb_call_instance_method(_inst, mname, ...)
SV* _inst
char* mname
PREINIT:
VALUE inst;
VALUE argv;
SV* pl_retval;
SV* iter;
PPCODE:
Printf(("rb_call_instance_method(%p, '%s', ...)\n",
_inst, mname));
if (isa_InlineRubyWrapper(_inst)) {
inst = UNWRAP_RUBY_OBJ(_inst);
iter = INLINE_MAGIC(_inst)->iter;
Printf(("inst (%p) successfully passed the PVMG test\n", (void *) inst));
}
else {
croak("Object is not a wrapped Inline::Ruby::Object object");
( run in 1.579 second using v1.01-cache-2.11-cpan-5511b514fd6 )