#include <mruby.h>
#include <mruby/proc.h>
#include <compile.h>
static mrb_value
oppailib_oppaifunc(mrb_state *mrb, mrb_value self) {
static int i = 0;
puts(i++ % 2 == 0 ?
" _ おっ \n"
" ( ゜∀゜) \n"
" ( ⊂彡 \n"
" | | \n"
" し ⌒J \n" :
" _ ∩ おっ \n"
" ( ゜∀゜)彡 ぱい\n"
" ( | \n"
" | | \n"
" し ⌒J \n");
return self;
}
int
main() {
int n;
mrb_state* mrb;
struct mrb_parser_state* st;
struct RClass *oppailib;
char* code =
"require 'Oppai' \n"
"Oppai.oppai().oppai().oppai().oppai() \n";
mrb = mrb_open();
oppailib = mrb_define_module(mrb, "Oppai");
mrb_define_class_method(mrb, oppailib, "oppai", oppailib_oppaifunc, ARGS_REQ(1));
st = mrb_parse_string(mrb, code);
n = mrb_generate_code(mrb, st->tree);
mrb_pool_close(st->pool);
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value());
}
/* vim:set et ts=2 sts=2 sw=2 tw=0: */
ruby のAPIと若干形が異なるので、既存コードとか移植する人はいろいろあるかも。2012/04/20
mruby で自前の組み込み関数を呼び出してみた。
FizzBuzzに並んで有名な教育向けな題材、Acme::Oppaiです。