diff options
Diffstat (limited to 'mini_builtin.c')
-rw-r--r-- | mini_builtin.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/mini_builtin.c b/mini_builtin.c index 86803e1656..38b0ca8d81 100644 --- a/mini_builtin.c +++ b/mini_builtin.c @@ -21,9 +21,25 @@ builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *ta rb_ast_t *ast = rb_builtin_ast(feature_name, &name_str); rb_vm_t *vm = GET_VM(); + if (!ast) { + 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; - const rb_iseq_t *iseq = rb_iseq_new(&ast->body, name_str, name_str, Qnil, NULL, ISEQ_TYPE_TOP); + static const rb_compile_option_t optimization = { + .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, 0, NULL, 0, ISEQ_TYPE_TOP, &optimization, Qnil); GET_VM()->builtin_function_table = NULL; rb_ast_dispose(ast); @@ -35,7 +51,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; @@ -61,6 +77,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) { |