diff options
author | yui-knk <spiketeika@gmail.com> | 2022-09-25 17:53:44 +0900 |
---|---|---|
committer | Yuichiro Kaneko <spiketeika@gmail.com> | 2022-10-08 17:59:11 +0900 |
commit | fbbdbdd8911ffb24d98bb71c7c33d24609ce7dfe (patch) | |
tree | 74e11b409521113dedae0e28e7013a22e61b8c3f /parse.y | |
parent | 7775d14356c375536c915ea4bd0fae019acaaeb1 (diff) | |
download | ruby-fbbdbdd8911ffb24d98bb71c7c33d24609ce7dfe.tar.gz |
Add error_tolerant option to RubyVM::AST
If this option is enabled, SyntaxError is not raised and Node is
returned even if passed script is broken.
[Feature #19013]
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -348,6 +348,7 @@ struct parser_params { unsigned int do_chomp: 1; unsigned int do_split: 1; unsigned int keep_script_lines: 1; + unsigned int error_tolerant: 1; NODE *eval_tree_begin; NODE *eval_tree; @@ -6384,7 +6385,9 @@ yycompile0(VALUE arg) mesg = rb_class_new_instance(0, 0, rb_eSyntaxError); } rb_set_errinfo(mesg); - return FALSE; + if (!p->error_tolerant) { + return FALSE; + } } tree = p->eval_tree; if (!tree) { @@ -13313,6 +13316,16 @@ rb_parser_keep_script_lines(VALUE vparser) TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p); p->keep_script_lines = 1; } + +void +rb_parser_error_tolerant(VALUE vparser) +{ + struct parser_params *p; + + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, p); + p->error_tolerant = 1; +} + #endif #ifdef RIPPER |