diff --git a/parse.y b/parse.y index 0bea812670..4c4cbcf633 100644 --- a/parse.y +++ b/parse.y @@ -10181,7 +10181,10 @@ new_evstr(struct parser_params *p, NODE *node, const YYLTYPE *loc) switch (nd_type(node)) { case NODE_STR: nd_set_type(node, NODE_DSTR); - case NODE_DSTR: case NODE_EVSTR: + return node; + case NODE_DSTR: + break; + case NODE_EVSTR: return node; } } diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index 0acbaed30f..65b8f87ad0 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1080,6 +1080,32 @@ x = __ENCODING__ end; end + def test_heredoc_interpolation + var = 1 + + v1 = <<~HEREDOC + something + #{"/#{var}"} + HEREDOC + + v2 = <<~HEREDOC + something + #{other = "/#{var}"} + HEREDOC + + v3 = <<~HEREDOC + something + #{("/#{var}")} + HEREDOC + + assert_equal "something\n/1\n", v1 + assert_equal "something\n/1\n", v2 + assert_equal "something\n/1\n", v3 + assert_equal v1, v2 + assert_equal v2, v3 + assert_equal v1, v3 + end + def test_unexpected_token_error assert_syntax_error('"x"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', /unexpected/) end