From 162c42dbe91eeb1230c6ba45818d59e3dbf97a76 Mon Sep 17 00:00:00 2001 From: BigBlack Date: Thu, 4 Feb 2021 15:14:43 +0800 Subject: [PATCH] ast: fix `new_struct := MyStruct{...(*old_struct)}` (#8544) --- vlib/v/ast/ast.v | 2 ++ vlib/v/tests/struct_test.v | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/vlib/v/ast/ast.v b/vlib/v/ast/ast.v index 56bfafddce..ac9b4ad523 100644 --- a/vlib/v/ast/ast.v +++ b/vlib/v/ast/ast.v @@ -1254,6 +1254,8 @@ pub fn (expr Expr) is_lvalue() bool { CTempVar { return true } IndexExpr { return expr.left.is_lvalue() } SelectorExpr { return expr.expr.is_lvalue() } + ParExpr { return expr.expr.is_lvalue() } // for var := &{...(*pointer_var)} + PrefixExpr { return expr.right.is_lvalue() } else {} } return false diff --git a/vlib/v/tests/struct_test.v b/vlib/v/tests/struct_test.v index ab50fccbd8..8eba8b8a0f 100644 --- a/vlib/v/tests/struct_test.v +++ b/vlib/v/tests/struct_test.v @@ -170,6 +170,14 @@ fn test_assoc_with_vars() { } assert merged.a == 42 assert merged.b == 7 + + def3 := &Def{ 100, 200 } + merged1 := Def{...(*def3)} + merged2 := &Def{...(*def3)} + assert merged1.a == 100 + assert merged1.b == 200 + assert merged2.a == 100 + assert merged2.b == 200 } const (