This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.

Dependencies:   mbed

For details, refer to the following.

http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/436

Note:There is a change in rtt0.h from the original source in the mruby/c. It was necessary for inclusion in C ++ source.

Committer:
tk_takateku
Date:
Wed Feb 15 01:03:35 2017 +0000
Revision:
0:33feccbba3ff
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tk_takateku 0:33feccbba3ff 1 #include "c_symbol.h"
tk_takateku 0:33feccbba3ff 2
tk_takateku 0:33feccbba3ff 3 #include "class.h"
tk_takateku 0:33feccbba3ff 4 #include "static.h"
tk_takateku 0:33feccbba3ff 5 #include "value.h"
tk_takateku 0:33feccbba3ff 6 #include "symbol.h"
tk_takateku 0:33feccbba3ff 7
tk_takateku 0:33feccbba3ff 8 static void c_symbol_to_s(mrb_vm *vm, mrb_value *v)
tk_takateku 0:33feccbba3ff 9 {
tk_takateku 0:33feccbba3ff 10 v->tt = MRB_TT_STRING;
tk_takateku 0:33feccbba3ff 11
tk_takateku 0:33feccbba3ff 12 const char *sym = symid_to_str(v->value.i);
tk_takateku 0:33feccbba3ff 13 v->value.str = mrbc_string_dup(vm, sym);
tk_takateku 0:33feccbba3ff 14 }
tk_takateku 0:33feccbba3ff 15
tk_takateku 0:33feccbba3ff 16 static void c_symbol_to_sym(mrb_vm *vm, mrb_value *v)
tk_takateku 0:33feccbba3ff 17 {
tk_takateku 0:33feccbba3ff 18 // nothing
tk_takateku 0:33feccbba3ff 19 }
tk_takateku 0:33feccbba3ff 20
tk_takateku 0:33feccbba3ff 21 static void c_symbol_equal(mrb_vm *vm, mrb_value *v)
tk_takateku 0:33feccbba3ff 22 {
tk_takateku 0:33feccbba3ff 23 if( mrbc_eq(v, &GET_ARG(0)) ){
tk_takateku 0:33feccbba3ff 24 SET_TRUE_RETURN();
tk_takateku 0:33feccbba3ff 25 } else {
tk_takateku 0:33feccbba3ff 26 SET_FALSE_RETURN();
tk_takateku 0:33feccbba3ff 27 }
tk_takateku 0:33feccbba3ff 28 }
tk_takateku 0:33feccbba3ff 29
tk_takateku 0:33feccbba3ff 30
tk_takateku 0:33feccbba3ff 31 void mrbc_init_class_symbol(mrb_vm *vm)
tk_takateku 0:33feccbba3ff 32 {
tk_takateku 0:33feccbba3ff 33 // Symbol
tk_takateku 0:33feccbba3ff 34 mrbc_class_symbol = mrbc_class_alloc(vm, "Symbol", mrbc_class_object);
tk_takateku 0:33feccbba3ff 35
tk_takateku 0:33feccbba3ff 36 mrbc_define_method(vm, mrbc_class_symbol, "to_s", c_symbol_to_s);
tk_takateku 0:33feccbba3ff 37 mrbc_define_method(vm, mrbc_class_symbol, "id2name", c_symbol_to_s);
tk_takateku 0:33feccbba3ff 38 mrbc_define_method(vm, mrbc_class_symbol, "to_sym", c_symbol_to_sym);
tk_takateku 0:33feccbba3ff 39 mrbc_define_method(vm, mrbc_class_symbol, "===", c_symbol_equal);
tk_takateku 0:33feccbba3ff 40 }
tk_takateku 0:33feccbba3ff 41
tk_takateku 0:33feccbba3ff 42