diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-05-18 09:35:40 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-05-18 09:35:40 +0900 |
commit | c4bad9f74e432572b80c24c7f1c519c5cc4c59a2 (patch) | |
tree | 39da14b04c3cd4fadfb8a5e36576b97afd28ea70 | |
parent | 39336a4210557d8677a2e07094efd785af0711ca (diff) | |
download | ruby-c4bad9f74e432572b80c24c7f1c519c5cc4c59a2.tar.gz |
Distinguish pre-condition and post-condition loops
-rw-r--r-- | ast.c | 3 | ||||
-rw-r--r-- | test/ruby/test_ast.rb | 12 |
2 files changed, 14 insertions, 1 deletions
@@ -374,7 +374,8 @@ node_children(rb_ast_t *ast, NODE *node) goto loop; case NODE_UNTIL: loop: - return rb_ary_new_from_node_args(ast, 2, node->nd_cond, node->nd_body); + return rb_ary_push(rb_ary_new_from_node_args(ast, 2, node->nd_cond, node->nd_body), + (node->nd_state ? Qtrue : Qfalse)); case NODE_ITER: case NODE_FOR: return rb_ary_new_from_node_args(ast, 2, node->nd_iter, node->nd_body); diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb index 974dfb77fb..7809be0994 100644 --- a/test/ruby/test_ast.rb +++ b/test/ruby/test_ast.rb @@ -278,4 +278,16 @@ class TestAst < Test::Unit::TestCase assert_equal(:LIT, body.type) assert_equal([1], body.children) end + + def test_while + node = RubyVM::AbstractSyntaxTree.parse('1 while 1') + _, _, body = *node.children + assert_equal(:WHILE, body.type) + type1 = body.children[2] + node = RubyVM::AbstractSyntaxTree.parse('begin 1 end while 1') + _, _, body = *node.children + assert_equal(:WHILE, body.type) + type2 = body.children[2] + assert_not_equal(type1, type2) + end end |