From 56749877eacd619fa23e4331e9b45455eb3ac7f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20Kr=C3=BCger?= <45282134+UweKrueger@users.noreply.github.com> Date: Tue, 23 Jun 2020 23:59:58 +0200 Subject: [PATCH] fmt: fix handling of double quotes inside single quotes --- vlib/v/fmt/fmt.v | 3 +++ vlib/v/fmt/tests/expressions_expected.vv | 11 +++++++++-- vlib/v/fmt/tests/expressions_input.vv | 12 ++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index 6c5d99856e..6ff260fb10 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -841,6 +841,9 @@ pub fn (mut f Fmt) expr(node ast.Expr) { for val in node.vals { if val.contains("'") { contains_single_quote = true + } + if val.contains('"') { + contains_single_quote = false break } } diff --git a/vlib/v/fmt/tests/expressions_expected.vv b/vlib/v/fmt/tests/expressions_expected.vv index a23055900d..4500718956 100644 --- a/vlib/v/fmt/tests/expressions_expected.vv +++ b/vlib/v/fmt/tests/expressions_expected.vv @@ -1,8 +1,9 @@ import v.checker import v.ast import v.table +import v.gen -pub fn string_inter_lit(mut c checker.Checker, mut node ast.StringInterLiteral) table.Type { +fn string_inter_lit(mut c checker.Checker, mut node ast.StringInterLiteral) table.Type { for i, expr in node.exprs { ftyp := c.expr(expr) node.expr_types << ftyp @@ -34,7 +35,7 @@ pub fn string_inter_lit(mut c checker.Checker, mut node ast.StringInterLiteral) return table.string_type } -fn get_some_val(a_test, b_test, c_test, d_test, e_test, f_test f64) { +fn get_some_val(a_test, b_test, c_test, d_test, e_test, f_test f64) f64 { return a_test * b_test * c_test * d_test + e_test * f_test * a_test * d_test + a_test * b_test * c_test @@ -46,3 +47,9 @@ fn main() { println('ok') } } + +fn gen_str_for_multi_return(mut g gen.Gen, info table.MultiReturn, styp, str_fn_name string) { + for i, _ in info.types { + println('\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a.arg$i));') + } +} diff --git a/vlib/v/fmt/tests/expressions_input.vv b/vlib/v/fmt/tests/expressions_input.vv index 1e7e993d4f..b9bd78d516 100644 --- a/vlib/v/fmt/tests/expressions_input.vv +++ b/vlib/v/fmt/tests/expressions_input.vv @@ -1,8 +1,9 @@ import v.checker import v.ast import v.table +import v.gen -pub fn string_inter_lit(mut c checker.Checker, mut node ast.StringInterLiteral) table.Type { +fn string_inter_lit(mut c checker.Checker, mut node ast.StringInterLiteral) table.Type { for i, expr in node.exprs { ftyp := c.expr(expr) node.expr_types << ftyp @@ -40,7 +41,7 @@ pub fn string_inter_lit(mut c checker.Checker, mut node ast.StringInterLiteral) return table.string_type } -fn get_some_val(a_test, b_test, c_test, d_test, e_test, f_test f64) { +fn get_some_val(a_test, b_test, c_test, d_test, e_test, f_test f64) f64 { return a_test*b_test*c_test* d_test+e_test*f_test*a_test*d_test+a_test* b_test*c_test @@ -55,3 +56,10 @@ fn main() { println('ok') } } + +fn gen_str_for_multi_return(mut g gen.Gen, + info table.MultiReturn, styp, str_fn_name string) { +for i, _ in info.types { + println('\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a.arg$i));') + } +}