diff options
author | Koichi Sasada <ko1@atdot.net> | 2019-12-10 16:19:13 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2019-12-11 11:24:42 +0900 |
commit | 2c5c60754cafe9895b7a7421cd0552eaa2ae8b09 (patch) | |
tree | 9f2d074bb370d18483afa7372df3bacf71f07955 /mini_builtin.c | |
parent | 943f3e5fd463bf2a4a3a4e92b5134e238b9c931d (diff) |
use compiled binary for gem_prelude.rb.
`gem_prelude.rb` is not compiled yet. This patch compile it to
compiled binary.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/2735
Diffstat (limited to 'mini_builtin.c')
-rw-r--r-- | mini_builtin.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/mini_builtin.c b/mini_builtin.c index 1254e5934f..49c6dceb19 100644 --- a/mini_builtin.c +++ b/mini_builtin.c @@ -6,11 +6,10 @@ // included from miniinit.c static struct st_table *loaded_builtin_table; - rb_ast_t *rb_builtin_ast(const char *feature_name, VALUE *name_str); -void -rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table) +static const rb_iseq_t * +builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *table) { VALUE name_str = 0; rb_ast_t *ast = rb_builtin_ast(feature_name, &name_str); @@ -26,11 +25,16 @@ rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin rb_io_write(rb_stdout, rb_iseq_disasm((const rb_iseq_t *)iseq)); } - // register (loaded iseq will not be freed) st_insert(loaded_builtin_table, (st_data_t)feature_name, (st_data_t)iseq); rb_gc_register_mark_object((VALUE)iseq); - // eval + return iseq; +} + +void +rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table) +{ + const rb_iseq_t *iseq = builtin_iseq_load(feature_name, table); rb_iseq_eval(iseq); } @@ -58,3 +62,10 @@ Init_builtin(void) rb_define_singleton_method(rb_cRubyVM, "each_builtin", each_builtin, 0); loaded_builtin_table = st_init_strtable(); } + +void +Init_builtin_features(void) +{ + // register for ruby + builtin_iseq_load("gem_prelude", NULL); +} |