summaryrefslogtreecommitdiff
path: root/tool/compile_prelude.rb
blob: 1012d1fbc2c682eaad90d02f74551c992f717da8 (plain)
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

prelude, outfile = *ARGV

lines = File.readlines(prelude).map{|line|
  line.dump
}

open(outfile, 'w'){|f|
  f.puts <<EOS__, <<'EOS__'

#include "ruby/ruby.h"
#include "vm_core.h"

static const char prelude_name[] = "#{File.basename(prelude)}";
static const char prelude_code[] =
#{lines.join("\n")}
;
EOS__

void
Init_prelude(void)
{
  rb_iseq_eval(rb_iseq_compile(
    rb_str_new(prelude_code, sizeof(prelude_code) - 1),
    rb_str_new(prelude_name, sizeof(prelude_name) - 1),
    INT2FIX(1)));

#if 0
    printf("%s\n", prelude_code);
#endif
}
EOS__
}