From 6c022db786658ab3c1be9e1562ce24019b7140cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20Kr=C3=BCger?= <45282134+UweKrueger@users.noreply.github.com> Date: Thu, 2 Jul 2020 00:02:59 +0200 Subject: [PATCH] scanner: fix string interpolation for '$a.b().c' (#5612) --- vlib/v/scanner/scanner.v | 12 +++++++----- vlib/v/tests/string_interpolation_test.v | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/vlib/v/scanner/scanner.v b/vlib/v/scanner/scanner.v index 59dc376c8f..4881e78d60 100644 --- a/vlib/v/scanner/scanner.v +++ b/vlib/v/scanner/scanner.v @@ -745,13 +745,15 @@ fn (mut s Scanner) text_scan() token.Token { } // Handle `'$fn()'` if c == `)` && s.is_inter_start { - s.is_inter_end = true - s.is_inter_start = false next_char := s.look_ahead(1) - if next_char == s.quote { - s.is_inside_string = false + if next_char != `.` { + s.is_inter_end = true + s.is_inter_start = false + if next_char == s.quote { + s.is_inside_string = false + } + return s.new_token(.rpar, '', 1) } - return s.new_token(.rpar, '', 1) } // all other tokens match c { diff --git a/vlib/v/tests/string_interpolation_test.v b/vlib/v/tests/string_interpolation_test.v index 7e9d1ca7be..8b75dbeef3 100644 --- a/vlib/v/tests/string_interpolation_test.v +++ b/vlib/v/tests/string_interpolation_test.v @@ -160,3 +160,25 @@ fn test_string_interpolation_with_negative_format_width_should_compile_and_run_w eprintln('---------------------------------------------------------------------------------------------') assert true } + +struct Aa { + a int +} + +struct Bb { + b Aa +} + +fn (x Bb) f() Aa { + return x.b +} + +fn test_method_interpolation() { + y := Bb{ + b: Aa{ + a: 2 + } + } + assert '>${y.f().a}<' == '>2<' + assert '>$y.f().a<' == '>2<' +}