summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--template/prelude.c.tmpl15
1 files changed, 8 insertions, 7 deletions
diff --git a/template/prelude.c.tmpl b/template/prelude.c.tmpl
index f755a39d8c..72c8c7107b 100644
--- a/template/prelude.c.tmpl
+++ b/template/prelude.c.tmpl
@@ -85,7 +85,10 @@ Prelude.new(output && output[/\w+(?=_prelude.c\b)/] || 'prelude', ARGV, vpath).i
% preludes = @preludes.values.sort
% preludes.each {|i, prelude, lines, sub|
-static const char prelude_name<%=i%><%=%>[] = "<%=c_esc(prelude_name(*prelude))%>";
+% name = prelude_name(*prelude)
+static const struct {
+ char L0[<%=name.size%><%=%>];
+} prelude_name<%=i%><%=%> = {"<%=c_esc(name)%>"};
static const struct {
% size = beg = 0
% lines.each_with_index {|(line, comment), n|
@@ -135,6 +138,7 @@ prelude_prefix_path(VALUE self)
% end
% unless preludes.empty?
+#define PRELUDE_STR(n) rb_usascii_str_new_static(prelude_##n.L0, sizeof(prelude_##n))
static void
prelude_eval(VALUE code, VALUE name, int line)
{
@@ -185,8 +189,8 @@ prelude_require(VALUE self, VALUE nth)
% @preludes.each_value do |i, prelude, lines, sub|
% if sub
case <%=i%><%=%>:
- code = rb_usascii_str_new(prelude_code<%=i%><%=%>.L0, sizeof(prelude_code<%=i%><%=%>));
- name = rb_usascii_str_new(prelude_name<%=i%><%=%>, sizeof(prelude_name<%=i%><%=%>) - 1);
+ code = PRELUDE_STR(code<%=i%><%=%>);
+ name = PRELUDE_STR(name<%=i%><%=%>);
break;
% end
% end
@@ -218,10 +222,7 @@ Init_<%=@init_name%><%=%>(void)
% end
% preludes.each do |i, prelude, lines, sub|
% next if sub
- prelude_eval(
- rb_usascii_str_new(prelude_code<%=i%><%=%>.L0, sizeof(prelude_code<%=i%><%=%>)),
- rb_usascii_str_new(prelude_name<%=i%><%=%>, sizeof(prelude_name<%=i%><%=%>) - 1),
- 1);
+ prelude_eval(PRELUDE_STR(code<%=i%><%=%>), PRELUDE_STR(name<%=i%><%=%>), 1);
% end
% if @have_sublib
rb_gc_force_recycle(prelude);