diff --git a/vlib/v/gen/c/testdata/strlit_len_optimization.out b/vlib/v/gen/c/testdata/strlit_len_optimization.out index b3172d1242..c84e04833a 100644 --- a/vlib/v/gen/c/testdata/strlit_len_optimization.out +++ b/vlib/v/gen/c/testdata/strlit_len_optimization.out @@ -1,2 +1,4 @@ 5 7 +6 +6 diff --git a/vlib/v/gen/c/testdata/strlit_len_optimization.vv b/vlib/v/gen/c/testdata/strlit_len_optimization.vv index 5ecdf69201..c9a7c8a779 100644 --- a/vlib/v/gen/c/testdata/strlit_len_optimization.vv +++ b/vlib/v/gen/c/testdata/strlit_len_optimization.vv @@ -1,6 +1,10 @@ fn main() { a := 'Vlang'.len b := r'Vlang\n'.len + c := 'Vlang\n'.len + d := 'Vlang$a'.len println(a) println(b) + println(c) + println(d) } diff --git a/vlib/v/transformer/transformer.v b/vlib/v/transformer/transformer.v index 2ddf97629c..1c50138a2c 100644 --- a/vlib/v/transformer/transformer.v +++ b/vlib/v/transformer/transformer.v @@ -637,9 +637,11 @@ pub fn (mut t Transformer) expr(mut node ast.Expr) ast.Expr { ast.SelectorExpr { node.expr = t.expr(mut node.expr) if mut node.expr is ast.StringLiteral && node.field_name == 'len' { - return ast.IntegerLiteral{ - val: node.expr.val.len.str() - pos: node.pos + if !node.expr.val.contains('\\') || node.expr.is_raw { + return ast.IntegerLiteral{ + val: node.expr.val.len.str() + pos: node.pos + } } } }