[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]