Skip to content

Instantly share code, notes, and snippets.

@matsumotory
Created June 6, 2012 05:45
Show Gist options
  • Select an option

  • Save matsumotory/2880113 to your computer and use it in GitHub Desktop.

Select an option

Save matsumotory/2880113 to your computer and use it in GitHub Desktop.
using mrb_class_define_method.
/*
gcc -I mruby/include -I mruby/src -O3 -g -Wall -Werror-implicit-function-declaration mruby_int_bug.c -lm mruby/mrblib/mrblib.o -lm mruby/lib/libmruby.a
*/
#include <string.h>
#include "mruby.h"
#include "mruby/proc.h"
#include "mruby/compile.h"
mrb_value mrb_num_get(mrb_state *mrb, mrb_value str)
{
return mrb_fixnum_value(100);
}
mrb_value mrb_st_get(mrb_state *mrb, mrb_value str)
{
return mrb_str_new(mrb, "hoge", strlen("hoge"));
}
int main() {
int n;
mrb_state* mrb;
struct mrb_parser_state* p;
struct RClass *class;
//struct RClass *class_int;
mrb = mrb_open();
//class = mrb_define_class(mrb, "Checkbug", mrb->object_class);
class = mrb_define_module(mrb, "Checkbug");
//class_int = mrb_define_class_under(mrb, class, "Check", mrb->object_class);
//mrb_define_method(mrb, class_int, "int", mrb_num_get, ARGS_NONE());
//mrb_define_method(mrb, class_int, "st", mrb_st_get, ARGS_NONE());
mrb_define_class_method(mrb, class, "int", mrb_num_get, ARGS_NONE());
mrb_define_class_method(mrb, class, "st", mrb_st_get, ARGS_NONE());
char* code =
"require 'Checkbug' \n"
"puts('-------------------') \n"
"puts(Checkbug.st) \n"
"puts(Checkbug.int) \n"
"puts(Checkbug.st) \n"
"puts('-------------------') \n";
p = mrb_parse_string(mrb, code);
n = mrb_generate_code(mrb, p->tree);
mrb_pool_close(p->pool);
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value());
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment