From 4d727639b45a43e73ec8588e837f74315dafa619 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 14 Jan 2019 10:16:54 +0000 Subject: ast.c: fix missing head part in dynamic literal git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ast.c | 4 +++- test/ruby/test_ast.rb | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ast.c b/ast.c index ead4344be9..959529738e 100644 --- a/ast.c +++ b/ast.c @@ -528,7 +528,9 @@ node_children(rb_ast_t *ast, NODE *node) goto dlit; case NODE_DSYM: dlit: - return rb_ary_new_from_node_args(ast, 2, node->nd_next->nd_head, node->nd_next->nd_next); + return rb_ary_new_from_args(3, node->nd_lit, + NEW_CHILD(ast, node->nd_next->nd_head), + NEW_CHILD(ast, node->nd_next->nd_next)); case NODE_EVSTR: return rb_ary_new_from_node_args(ast, 1, node->nd_body); case NODE_ARGSCAT: diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb index d57b60b3f7..974dfb77fb 100644 --- a/test/ruby/test_ast.rb +++ b/test/ruby/test_ast.rb @@ -266,4 +266,16 @@ class TestAst < Test::Unit::TestCase assert_equal(:VCALL, recv.type) assert_equal(:foo, mid) end + + def test_dstr + node = RubyVM::AbstractSyntaxTree.parse('"foo#{1}bar"') + _, _, body = *node.children + assert_equal(:DSTR, body.type) + head, body = body.children + assert_equal("foo", head) + assert_equal(:EVSTR, body.type) + body, = body.children + assert_equal(:LIT, body.type) + assert_equal([1], body.children) + end end -- cgit v1.2.3