diff options
Diffstat (limited to 'templates.rb')
| -rw-r--r-- | templates.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/templates.rb b/templates.rb new file mode 100644 index 0000000..177769d --- /dev/null +++ b/templates.rb @@ -0,0 +1,70 @@ +module Template + class << self + def base(gem_name, init_body, final_body) + %{ +void +mrb_mruby_#{gem_name}_gem_init(mrb_state* mrb) { +#{init_body} +} + +void +mrb_mruby_#{gem_name}_gem_final(mrb_state* mrb) { +#{final_body} +} + } + end + + def init_module_function(module_name, function_name, mrb_function_name, mrb_args) + %{ + mrb_define_module_function(mrb, #{module_name}, "#{function_name}", mrb_#{mrb_function_name}, #{mrb_args}); + } + end + + def function(function_name, body) + %{ +static mrb_value +mrb_#{function_name}(mrb_state* mrb, mrb_value self) { +#{body} +} + } + end + + def init_function(class_name, function_name, mrb_function_name, mrb_args) + %{mrb_define_method(mrb, #{class_name}, "#{function_name}", mrb_#{mrb_function_name}, #{mrb_args}); + } + end + + def get_kwargs(kwarg_num, body) + %{ +uint32_t kw_num = #{kwarg_num}; +const mrb_sym kw_names[] = { +#{body} +}; +mrb_value kw_values[kw_num]; +const mrb_kwargs kwargs = { kw_num, 0, kw_names, kw_values, NULL }; +mrb_get_args(mrb, "|:", &kwargs); + } + end + + def unwrap_kwarg(kwarg_iter, body_if_defined, body_if_undefined) + %{ +if (mrb_undef_p(kw_values[#{kwarg_iter}])) { +#{body_if_defined} +} else { +#{body_if_undefined} +} + } + end + + def unwrap_struct(var_name, target, mrb_type, type) + %{#{var_name} = DATA_GET_PTR(mrb, #{target}, &#{mrb_type}, #{type})} + end + + def define_module(module_name) + %{struct RClass *#{module_name.downcase} = mrb_define_module(mrb, "#{module_name}"); + } + end + + end +end + |
