From 40e86a7973f0443945103f8530d80112e50f0fdf Mon Sep 17 00:00:00 2001 From: Krchi <997054144@qq.com> Date: Thu, 8 Jan 2026 12:28:50 +0800 Subject: [PATCH] wasm: fix string plus assign with call expr (#26287) --- vlib/v/gen/wasm/gen.v | 10 +++++++--- vlib/v/gen/wasm/tests/builtin.vv | 7 +++++++ vlib/v/gen/wasm/tests/builtin.vv.out | 3 ++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/vlib/v/gen/wasm/gen.v b/vlib/v/gen/wasm/gen.v index 347482dd2..ca3d0c8d0 100644 --- a/vlib/v/gen/wasm/gen.v +++ b/vlib/v/gen/wasm/gen.v @@ -1365,9 +1365,13 @@ pub fn (mut g Gen) expr_stmt(node ast.Stmt, expected ast.Type) { } } - if !passed && node.op == .assign { - if v := g.get_var_from_expr(left) { - var = v + if !passed { + if node.op == .assign { + if v := g.get_var_from_expr(left) { + var = v + } + } else if node.op == .plus_assign && g.is_param_type(rt) { + var = g.new_local('', rt) } } diff --git a/vlib/v/gen/wasm/tests/builtin.vv b/vlib/v/gen/wasm/tests/builtin.vv index 165aabe51..1c1a05a99 100644 --- a/vlib/v/gen/wasm/tests/builtin.vv +++ b/vlib/v/gen/wasm/tests/builtin.vv @@ -118,6 +118,12 @@ fn str_implicit() { println(a + 10) } +fn str_plus_assign_with_call_expr() { + mut str := 'a' + str += 1.str() + println(str) +} + fn assertions() { assert true, 'hello' assert true @@ -133,6 +139,7 @@ fn main() { str_cmp() str_loop_concat() str_literal() + str_plus_assign_with_call_expr() assertions() // panic('nooo!') diff --git a/vlib/v/gen/wasm/tests/builtin.vv.out b/vlib/v/gen/wasm/tests/builtin.vv.out index 7a7dff055..fdbd6d8e8 100644 --- a/vlib/v/gen/wasm/tests/builtin.vv.out +++ b/vlib/v/gen/wasm/tests/builtin.vv.out @@ -43,6 +43,7 @@ Such wow Helllo! 42 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10! +a1 wasm builtins 1 -1 \ No newline at end of file +1 -- 2.39.5