ruby-changes:73928
From: yui-knk <ko1@a...>
Date: Sat, 8 Oct 2022 17:59:33 +0900 (JST)
Subject: [ruby-changes:73928] 3531086095 (master): "expr_value" can be error
https://git.ruby-lang.org/ruby.git/commit/?id=3531086095 From 3531086095aed9d2898de686bc67ab3a6c2192de Mon Sep 17 00:00:00 2001 From: yui-knk <spiketeika@g...> Date: Sat, 1 Oct 2022 17:53:39 +0900 Subject: "expr_value" can be error So that "IF" node is kept in the case below ``` def m if end ``` [Feature #19013] --- parse.y | 6 ++++++ test/ruby/test_ast.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/parse.y b/parse.y index a8eadfebd3..7d830c2255 100644 --- a/parse.y +++ b/parse.y @@ -1901,6 +1901,12 @@ expr_value : expr https://github.com/ruby/ruby/blob/trunk/parse.y#L1901 value_expr($1); $$ = $1; } + | error + { + /*%%%*/ + $$ = NEW_ERROR(&@$); + /*% %*/ + } ; expr_value_do : {COND_PUSH(1);} expr_value do {COND_POP();} diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb index cda325c1fd..ebb080b101 100644 --- a/test/ruby/test_ast.rb +++ b/test/ruby/test_ast.rb @@ -1007,4 +1007,39 @@ dummy https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L1007 body: nil)))))) EXP end + + def test_error_tolerant_expr_value_can_be_error + node = RubyVM::AbstractSyntaxTree.parse(<<~STR, error_tolerant: true) + def m + if + end + STR + + str = "" + PP.pp(node, str) + assert_equal(<<~EXP, str) + (SCOPE@1:0-3:3 + tbl: [] + args: nil + body: + (DEFN@1:0-3:3 + mid: :m + body: + (SCOPE@1:0-3:3 + tbl: [] + args: + (ARGS@1:5-1:5 + pre_num: 0 + pre_init: nil + opt: nil + first_post: nil + post_num: 0 + post_init: nil + rest: nil + kw: nil + kwrest: nil + block: nil) + body: (IF@2:2-3:3 (ERROR@3:0-3:3) nil nil)))) + EXP + end end -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/