summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2021-08-27 16:19:56 +0900
committerYusuke Endoh <mame@ruby-lang.org>2021-12-13 10:29:08 +0900
commit8613c0c6758b8d560b2461bd540c815d28fcf844 (patch)
treefb2626dcdfed0ba4a4f77dfa6a5377632f3f9e30 /ruby.c
parent84cd3964d9a5c6768610a2685ba04237dd79b57a (diff)
Introduce an option "--dump=insns_without_opt" for debugging purposes
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4784
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/ruby.c b/ruby.c
index b9ed1ae89c..09b7c770cf 100644
--- a/ruby.c
+++ b/ruby.c
@@ -143,13 +143,15 @@ enum feature_flag_bits {
X(parsetree_with_comment) \
SEP \
X(insns) \
+ SEP \
+ X(insns_without_opt) \
/* END OF DUMPS */
enum dump_flag_bits {
dump_version_v,
EACH_DUMPS(DEFINE_DUMP, COMMA),
dump_exit_bits = (DUMP_BIT(yydebug) | DUMP_BIT(syntax) |
DUMP_BIT(parsetree) | DUMP_BIT(parsetree_with_comment) |
- DUMP_BIT(insns))
+ DUMP_BIT(insns) | DUMP_BIT(insns_without_opt))
};
typedef struct ruby_cmdline_options ruby_cmdline_options_t;
@@ -330,6 +332,7 @@ usage(const char *name, int help, int highlight, int columns)
};
static const struct message dumps[] = {
M("insns", "", "instruction sequences"),
+ M("insns_without_out", "", "instruction sequences compiled with no optimization"),
M("yydebug", "", "yydebug of yacc parser generator"),
M("parsetree", "", "AST"),
M("parsetree_with_comment", "", "AST with comments"),
@@ -2161,11 +2164,11 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
GetBindingPtr(rb_const_get(rb_cObject, rb_intern("TOPLEVEL_BINDING")),
toplevel_binding);
const struct rb_block *base_block = toplevel_context(toplevel_binding);
- iseq = rb_iseq_new_main(&ast->body, opt->script_name, path, vm_block_iseq(base_block));
+ iseq = rb_iseq_new_main(&ast->body, opt->script_name, path, vm_block_iseq(base_block), !(dump & DUMP_BIT(insns_without_opt)));
rb_ast_dispose(ast);
}
- if (dump & DUMP_BIT(insns)) {
+ if (dump & (DUMP_BIT(insns) | DUMP_BIT(insns_without_opt))) {
rb_io_write(rb_stdout, rb_iseq_disasm((const rb_iseq_t *)iseq));
rb_io_flush(rb_stdout);
dump &= ~DUMP_BIT(insns);