From 64f403e997037341c08402d1343910d084d68088 Mon Sep 17 00:00:00 2001 From: yuyi Date: Wed, 31 Aug 2022 15:42:28 +0800 Subject: [PATCH] cgen: fix dumping shared variable (#15615) --- vlib/v/gen/c/dumpexpr.v | 10 ++++++++-- vlib/v/tests/inout/dump_shared_arg.out | 3 +++ vlib/v/tests/inout/dump_shared_arg.vv | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 vlib/v/tests/inout/dump_shared_arg.out create mode 100644 vlib/v/tests/inout/dump_shared_arg.vv diff --git a/vlib/v/gen/c/dumpexpr.v b/vlib/v/gen/c/dumpexpr.v index a6dbd26f9..34db7afd9 100644 --- a/vlib/v/gen/c/dumpexpr.v +++ b/vlib/v/gen/c/dumpexpr.v @@ -14,7 +14,13 @@ fn (mut g Gen) dump_expr(node ast.DumpExpr) { } dump_fn_name := '_v_dump_expr_$node.cname' + (if node.expr_type.is_ptr() { '_ptr' } else { '' }) g.write(' ${dump_fn_name}(${ctoslit(fpath)}, $line, $sexpr, ') - g.expr(node.expr) + if node.expr_type.has_flag(.shared_f) { + g.write('&') + g.expr(node.expr) + g.write('->val') + } else { + g.expr(node.expr) + } g.write(' )') } @@ -27,7 +33,7 @@ fn (mut g Gen) dump_expr_definitions() { _, str_method_expects_ptr, _ := dump_sym.str_method_info() is_ptr := ast.Type(dump_type).is_ptr() deref, _ := deref_kind(str_method_expects_ptr, is_ptr, dump_type) - to_string_fn_name := g.get_str_fn(dump_type) + to_string_fn_name := g.get_str_fn(ast.Type(dump_type).clear_flag(.shared_f)) ptr_asterisk := if is_ptr { '*' } else { '' } mut str_dumparg_type := '$cname$ptr_asterisk' if dump_sym.kind == .function { diff --git a/vlib/v/tests/inout/dump_shared_arg.out b/vlib/v/tests/inout/dump_shared_arg.out new file mode 100644 index 000000000..fd00585d6 --- /dev/null +++ b/vlib/v/tests/inout/dump_shared_arg.out @@ -0,0 +1,3 @@ +[vlib/v/tests/inout/dump_shared_arg.vv:12] inst: &AtomicStruct{ + a: 1 +} diff --git a/vlib/v/tests/inout/dump_shared_arg.vv b/vlib/v/tests/inout/dump_shared_arg.vv new file mode 100644 index 000000000..59dcad530 --- /dev/null +++ b/vlib/v/tests/inout/dump_shared_arg.vv @@ -0,0 +1,14 @@ +module main + +struct AtomicStruct { + a int +} + +fn main() { + shared inst := AtomicStruct{ + a: 1 + } + lock inst { + dump(inst) + } +} -- 2.30.2