Bug #20270
closedOptions with `--parser=prism`
Description
--dump option¶
Currently parsetree and prism_parsetree bits are separated, but it seems meaningless as far as --parser option selects only one parser.
Why doesn't simply --dump=parsetree dump AST by parse.y, or PRISM AST if --parser=prism is given?
Actually, ruby --dump=parsetree --parser=prism just segfaults, because these bits and --parser option are separately handled.
streaming code from stdin¶
$ echo end | ruby --parser=prism -
ruby: warning: The compiler based on the Prism parser is currently experimental and compatibility with the compiler based on parse.y is not yet complete. Please report any issues you find on the `ruby/prism` issue tracker.
-: warning: Prism support for streaming code from stdin is not currently supported
Nothing reported is fine, since it is not currently supported.
I was a bit curious that it looks like trying something after the warning.
if (strcmp(opt->script, "-") == 0) {
int xflag = opt->xflag;
VALUE rb_source = open_load_file(opt->script_name, &xflag);
opt->xflag = xflag != 0;
rb_warn("Prism support for streaming code from stdin is not currently supported");
error = pm_parse_string(&result, rb_source, opt->script_name);
}
Note that open_load_file returns rb_stdin when - is given.
This object is a RFile, not a RString, and RSTRING_PTR(rb_source) accesses after the object boundary.
It should just bail out, not try obviously wrong thing.
Fix¶
https://github.com/nobu/ruby/tree/options-refactor
https://github.com/ruby/ruby/pull/9991