1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
|