summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2022-09-25 17:53:44 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2022-10-08 17:59:11 +0900
commitfbbdbdd8911ffb24d98bb71c7c33d24609ce7dfe (patch)
tree74e11b409521113dedae0e28e7013a22e61b8c3f /parse.y
parent7775d14356c375536c915ea4bd0fae019acaaeb1 (diff)
downloadruby-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.y15
1 files changed, 14 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index b16dc35b88..c05ce48068 100644
--- a/parse.y
+++ b/parse.y
@@ -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