diff options
Diffstat (limited to 'mini_builtin.c')
-rw-r--r-- | mini_builtin.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/mini_builtin.c b/mini_builtin.c index 8c8cf66263..b38642e89b 100644 --- a/mini_builtin.c +++ b/mini_builtin.c @@ -12,31 +12,36 @@ static struct st_table *loaded_builtin_table; #endif -rb_ast_t *rb_builtin_ast(const char *feature_name, VALUE *name_str); +VALUE rb_builtin_vast(const char *feature_name, VALUE *name_str); 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); + rb_ast_t *ast; + VALUE vast = rb_builtin_vast(feature_name, &name_str); rb_vm_t *vm = GET_VM(); + if (NIL_P(vast)) { + rb_fatal("builtin_iseq_load: can not find %s; " + "probably miniprelude.c is out of date", + feature_name); + } vm->builtin_function_table = table; - vm->builtin_inline_index = 0; static const rb_compile_option_t optimization = { - TRUE, /* int inline_const_cache; */ - TRUE, /* int peephole_optimization; */ - FALSE,/* int tailcall_optimization; */ - TRUE, /* int specialized_instruction; */ - TRUE, /* int operands_unification; */ - TRUE, /* int instructions_unification; */ - TRUE, /* int stack_caching; */ - TRUE, /* int frozen_string_literal; */ - FALSE, /* int debug_frozen_string_literal; */ - FALSE, /* unsigned int coverage_enabled; */ - 0, /* int debug_level; */ + .inline_const_cache = TRUE, + .peephole_optimization = TRUE, + .tailcall_optimization = FALSE, + .specialized_instruction = TRUE, + .operands_unification = TRUE, + .instructions_unification = TRUE, + .frozen_string_literal = TRUE, + .debug_frozen_string_literal = FALSE, + .coverage_enabled = FALSE, + .debug_level = 0, }; - const rb_iseq_t *iseq = rb_iseq_new_with_opt(&ast->body, name_str, name_str, Qnil, INT2FIX(0), NULL, 0, ISEQ_TYPE_TOP, &optimization); + ast = rb_ruby_ast_data_get(vast); + const rb_iseq_t *iseq = rb_iseq_new_with_opt(vast, name_str, name_str, Qnil, 0, NULL, 0, ISEQ_TYPE_TOP, &optimization, Qnil); GET_VM()->builtin_function_table = NULL; rb_ast_dispose(ast); @@ -48,7 +53,7 @@ builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *ta #ifndef INCLUDED_BY_BUILTIN_C st_insert(loaded_builtin_table, (st_data_t)feature_name, (st_data_t)iseq); - rb_gc_register_mark_object((VALUE)iseq); + rb_vm_register_global_object((VALUE)iseq); #endif return iseq; @@ -74,6 +79,7 @@ each_builtin_i(st_data_t key, st_data_t val, st_data_t dmy) return ST_CONTINUE; } +/* :nodoc: */ static VALUE each_builtin(VALUE self) { |