From 6bcbb9a02baa8585c2d65e29c0a65d791b077611 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Mon, 22 Jan 2024 09:39:59 -0500 Subject: [PATCH] Make prism respect dump_without_opt --- iseq.c | 8 ++++---- iseq.h | 2 +- load.c | 2 +- ruby.c | 3 ++- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/iseq.c b/iseq.c index 046a1434c4..170fe44465 100644 --- a/iseq.c +++ b/iseq.c @@ -1399,7 +1399,7 @@ iseqw_s_compile(int argc, VALUE *argv, VALUE self) } static void -iseqw_s_compile_prism_compile(pm_parser_t *parser, VALUE opt, rb_iseq_t *iseq, VALUE file, VALUE path, int first_lineno) +iseqw_s_compile_prism_compile(pm_parser_t *parser, VALUE optimize, rb_iseq_t *iseq, VALUE file, VALUE path, int first_lineno) { pm_node_t *node = pm_parse(parser); @@ -1422,7 +1422,7 @@ iseqw_s_compile_prism_compile(pm_parser_t *parser, VALUE opt, rb_iseq_t *iseq, V pm_code_location(&code_location, &parser->newline_list, &node->location); rb_compile_option_t option; - make_compile_option(&option, opt); + make_compile_option(&option, optimize); prepare_iseq_build(iseq, rb_fstring_lit(""), file, path, first_lineno, &code_location, -1, NULL, 0, ISEQ_TYPE_TOP, Qnil, &option); pm_scope_node_t scope_node; @@ -1533,7 +1533,7 @@ iseqw_s_compile_file_prism(int argc, VALUE *argv, VALUE self) } rb_iseq_t * -rb_iseq_new_main_prism(pm_string_t *input, pm_options_t *options, VALUE path) +rb_iseq_new_main_prism(pm_string_t *input, pm_options_t *options, VALUE path, VALUE optimize) { pm_parser_t parser; pm_parser_init(&parser, pm_string_source(input), pm_string_length(input), options); @@ -1543,7 +1543,7 @@ rb_iseq_new_main_prism(pm_string_t *input, pm_options_t *options, VALUE path) pm_options_line_set(options, start_line); rb_iseq_t *iseq = iseq_alloc(); - iseqw_s_compile_prism_compile(&parser, Qnil, iseq, path, path, start_line); + iseqw_s_compile_prism_compile(&parser, optimize, iseq, path, path, start_line); pm_parser_free(&parser); return iseq; diff --git a/iseq.h b/iseq.h index 35780f2862..e5774d098c 100644 --- a/iseq.h +++ b/iseq.h @@ -172,7 +172,7 @@ void rb_iseq_init_trace(rb_iseq_t *iseq); int rb_iseq_add_local_tracepoint_recursively(const rb_iseq_t *iseq, rb_event_flag_t turnon_events, VALUE tpval, unsigned int target_line, bool target_bmethod); int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval); const rb_iseq_t *rb_iseq_load_iseq(VALUE fname); -rb_iseq_t * rb_iseq_new_main_prism(pm_string_t *input, pm_options_t *options, VALUE path); +rb_iseq_t * rb_iseq_new_main_prism(pm_string_t *input, pm_options_t *options, VALUE path, VALUE optimize); #if VM_INSN_INFO_TABLE_IMPL == 2 unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body); diff --git a/load.c b/load.c index f0c62dc707..a35042e5f5 100644 --- a/load.c +++ b/load.c @@ -747,7 +747,7 @@ load_iseq_eval(rb_execution_context_t *ec, VALUE fname) pm_parser_t parser; pm_parser_init(&parser, pm_string_source(&input), pm_string_length(&input), &options); - iseq = rb_iseq_new_main_prism(&input, &options, fname); + iseq = rb_iseq_new_main_prism(&input, &options, fname, Qnil); pm_string_free(&input); pm_options_free(&options); diff --git a/ruby.c b/ruby.c index 047a90c3a1..bccc6504a0 100644 --- a/ruby.c +++ b/ruby.c @@ -2427,7 +2427,8 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) pm_options_filepath_set(&options, RSTRING_PTR(opt->script_name)); } - iseq = rb_iseq_new_main_prism(&input, &options, path); + VALUE optimize = dump & DUMP_BIT(insns_without_opt) ? Qfalse : Qnil; + iseq = rb_iseq_new_main_prism(&input, &options, path, optimize); ruby_opt_init(opt); pm_string_free(&input);