This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.
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.
mrubyc/c_symbol.c@0:33feccbba3ff, 2017-02-15 (annotated)
- Committer:
- tk_takateku
- Date:
- Wed Feb 15 01:03:35 2017 +0000
- Revision:
- 0:33feccbba3ff
Commit before publishing
Who changed what in which revision?
User | Revision | Line number | New 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 |