Project

General

Profile

Bug #20270

Updated by nobu (Nobuyoshi Nakada) 3 months ago

### `--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 
 ```sh-session 
 $ 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. 

 ```C 
             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 
 

Back