diff options
author | TSUYUSATO Kitsune <make.just.on@gmail.com> | 2023-12-02 13:00:11 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-12-06 20:48:11 +0000 |
commit | cbb941f58a236d95d9e95c3f6dbd4510c04351f0 (patch) | |
tree | 50a94da1d96ace7d09392e07944a9fc5b8b2e3dc | |
parent | a57186b9d1b0db3a88e5e9082347903b109f7d0e (diff) | |
download | ruby-cbb941f58a236d95d9e95c3f6dbd4510c04351f0.tar.gz |
[ruby/prism] Fix closing loc for string literals
Fix https://github.com/ruby/prism/pull/1974
https://github.com/ruby/prism/commit/453d403593
-rw-r--r-- | prism/prism.c | 6 | ||||
-rw-r--r-- | test/prism/errors_test.rb | 16 |
2 files changed, 17 insertions, 5 deletions
diff --git a/prism/prism.c b/prism/prism.c index c751729bda..7eeed37ade 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -13580,7 +13580,7 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { node = (pm_node_t *) pm_symbol_node_create_unescaped(parser, &opening, &content, &parser->previous, &unescaped); } else if (match1(parser, PM_TOKEN_EOF)) { pm_parser_err_token(parser, &opening, PM_ERR_STRING_LITERAL_TERM); - node = (pm_node_t *) pm_string_node_create_unescaped(parser, &opening, &content, &parser->previous, &unescaped); + node = (pm_node_t *) pm_string_node_create_unescaped(parser, &opening, &content, &parser->current, &unescaped); } else { expect1(parser, PM_TOKEN_STRING_END, PM_ERR_STRING_LITERAL_TERM); node = (pm_node_t *) pm_string_node_create_unescaped(parser, &opening, &content, &parser->previous, &unescaped); @@ -13621,7 +13621,7 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { node = (pm_node_t *) pm_interpolated_symbol_node_create(parser, &opening, &parts, &parser->previous); } else if (match1(parser, PM_TOKEN_EOF)) { pm_parser_err_token(parser, &opening, PM_ERR_STRING_INTERPOLATED_TERM); - node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->previous); + node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->current); } else { expect1(parser, PM_TOKEN_STRING_END, PM_ERR_STRING_INTERPOLATED_TERM); node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->previous); @@ -13644,7 +13644,7 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { node = (pm_node_t *) pm_interpolated_symbol_node_create(parser, &opening, &parts, &parser->previous); } else if (match1(parser, PM_TOKEN_EOF)) { pm_parser_err_token(parser, &opening, PM_ERR_STRING_INTERPOLATED_TERM); - node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->previous); + node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->current); } else { expect1(parser, PM_TOKEN_STRING_END, PM_ERR_STRING_INTERPOLATED_TERM); node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->previous); diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 58bb2e3218..eaee10e514 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -146,10 +146,22 @@ module Prism ] end - def test_unterminated_string - assert_errors expression('"hello'), '"hello', [ + def test_unterminated_interpolated_string + expr = expression('"hello') + assert_errors expr, '"hello', [ ["expected a closing delimiter for the interpolated string", 0..1] ] + assert_equal expr.parts[0].unescaped, "hello" + assert_equal expr.closing, "" + end + + def test_unterminated_string + expr = expression("'hello") + assert_errors expr, "'hello", [ + ["expected a closing delimiter for the string literal", 0..1] + ] + assert_equal expr.unescaped, "hello" + assert_equal expr.closing, "" end def test_incomplete_instance_var_string |