From 54b6b43922dc8c6b6384b13bc158d5274b7ad76d Mon Sep 17 00:00:00 2001 From: yuyi Date: Wed, 2 Nov 2022 20:21:28 +0800 Subject: [PATCH] cgen: fix dump(none) (#16287) --- vlib/v/gen/c/dumpexpr.v | 9 ++++++++- vlib/v/tests/inout/dump_none.out | 1 + vlib/v/tests/inout/dump_none.vv | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/inout/dump_none.out create mode 100644 vlib/v/tests/inout/dump_none.vv diff --git a/vlib/v/gen/c/dumpexpr.v b/vlib/v/gen/c/dumpexpr.v index a9543392ef..3ee76e5ba4 100644 --- a/vlib/v/gen/c/dumpexpr.v +++ b/vlib/v/gen/c/dumpexpr.v @@ -45,7 +45,12 @@ fn (mut g Gen) dump_expr_definitions() { deref, _ := deref_kind(str_method_expects_ptr, is_ptr, dump_type) to_string_fn_name := g.get_str_fn(typ.clear_flag(.shared_f)) ptr_asterisk := if is_ptr { '*'.repeat(typ.nr_muls()) } else { '' } - mut str_dumparg_type := g.cc_type(dump_type, true) + ptr_asterisk + mut str_dumparg_type := '' + if dump_sym.kind == .none_ { + str_dumparg_type = 'IError' + ptr_asterisk + } else { + str_dumparg_type = g.cc_type(dump_type, true) + ptr_asterisk + } if dump_sym.kind == .function { fninfo := dump_sym.info as ast.FnType str_dumparg_type = 'DumpFNType_$name' @@ -67,6 +72,8 @@ fn (mut g Gen) dump_expr_definitions() { surrounder.add('\tstring sline = int_str(line);', '\tstring_free(&sline);') if dump_sym.kind == .function { surrounder.add('\tstring value = ${to_string_fn_name}();', '\tstring_free(&value);') + } else if dump_sym.kind == .none_ { + surrounder.add('\tstring value = _SLIT("none");', '\tstring_free(&value);') } else { surrounder.add('\tstring value = ${to_string_fn_name}(${deref}dump_arg);', '\tstring_free(&value);') diff --git a/vlib/v/tests/inout/dump_none.out b/vlib/v/tests/inout/dump_none.out new file mode 100644 index 0000000000..828cf154e3 --- /dev/null +++ b/vlib/v/tests/inout/dump_none.out @@ -0,0 +1 @@ +[vlib/v/tests/inout/dump_none.vv:2] none: none diff --git a/vlib/v/tests/inout/dump_none.vv b/vlib/v/tests/inout/dump_none.vv new file mode 100644 index 0000000000..76d05596db --- /dev/null +++ b/vlib/v/tests/inout/dump_none.vv @@ -0,0 +1,3 @@ +fn main() { + dump(none) +}