summaryrefslogtreecommitdiff
path: root/mini_builtin.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2019-12-10 16:19:13 +0900
committerKoichi Sasada <ko1@atdot.net>2019-12-11 11:24:42 +0900
commit2c5c60754cafe9895b7a7421cd0552eaa2ae8b09 (patch)
tree9f2d074bb370d18483afa7372df3bacf71f07955 /mini_builtin.c
parent943f3e5fd463bf2a4a3a4e92b5134e238b9c931d (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.c21
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);
+}