diff options
Diffstat (limited to 'ruby.c')
-rw-r--r-- | ruby.c | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -69,6 +69,8 @@ enum dump_flag_bits { dump_usage, dump_yydebug, dump_syntax, + dump_parsetree, + dump_parsetree_with_comment, dump_insns, dump_flag_count }; @@ -643,9 +645,11 @@ dump_option(const char *str, int len, void *arg) SET_WHEN_DUMP(usage); SET_WHEN_DUMP(yydebug); SET_WHEN_DUMP(syntax); + SET_WHEN_DUMP(parsetree); + SET_WHEN_DUMP(parsetree_with_comment); SET_WHEN_DUMP(insns); rb_warn("don't know how to dump `%.*s',", len, str); - rb_warn("but only [version, copyright, usage, yydebug, syntax, insns]."); + rb_warn("but only [version, copyright, usage, yydebug, syntax, parsetree, parsetree_with_comment, insns]."); } #define RUBY_VM_OBJECT(vm, name) \ @@ -1213,6 +1217,7 @@ rb_f_chomp(argc, argv) } void rb_stdio_set_default_encoding(void); +VALUE rb_parser_dump_tree(NODE *node, int comment); static VALUE process_options(rb_vm_t *vm, int argc, char **argv, struct cmdline_options *opt) @@ -1304,7 +1309,6 @@ process_options(rb_vm_t *vm, int argc, char **argv, struct cmdline_options *opt) ruby_init_loadpath_safe(opt->safe_level); rb_enc_find_index("encdb"); lenc = rb_locale_encoding(); - (void)rb_filesystem_encoding(); rb_enc_associate(rb_progname, lenc); parser = rb_parser_new(); if (opt->dump & DUMP_BIT(yydebug)) { @@ -1436,6 +1440,12 @@ process_options(rb_vm_t *vm, int argc, char **argv, struct cmdline_options *opt) rb_define_global_function("chomp", rb_f_chomp, -1); } + if (opt->dump & DUMP_BIT(parsetree) || opt->dump & DUMP_BIT(parsetree_with_comment)) { + rb_io_write(rb_stdout, rb_parser_dump_tree(tree, opt->dump & DUMP_BIT(parsetree_with_comment))); + rb_io_flush(rb_stdout); + return Qtrue; + } + PREPARE_PARSE_MAIN({ iseq = rb_iseq_new_main(tree, opt->script_name); }); |