summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/ruby.c b/ruby.c
index 35572f8087..e72cd15057 100644
--- a/ruby.c
+++ b/ruby.c
@@ -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);
});