diff --git a/vlib/v/ast/table.v b/vlib/v/ast/table.v index 6de165c4ae..2807e3fa7b 100644 --- a/vlib/v/ast/table.v +++ b/vlib/v/ast/table.v @@ -28,6 +28,7 @@ pub mut: arr_reverse bool // arr.reverse() arr_init bool // [1, 2, 3] arr_map bool // []map[key]value + type_name bool // var.type_name() map_update bool // {...foo} interpolation bool // '${foo} ${bar}' option_or_result bool // has panic call diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index f886586ba5..250e4ebdf5 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -1988,6 +1988,7 @@ fn (mut c Checker) method_call(mut node ast.CallExpr, mut continue_check &bool) } if left_sym.kind in [.sum_type, .interface] { if method_name == 'type_name' { + c.table.used_features.type_name = true return ast.string_type } if method_name == 'type_idx' { diff --git a/vlib/v/markused/markused.v b/vlib/v/markused/markused.v index 265bcc5186..a2e38dfb84 100644 --- a/vlib/v/markused/markused.v +++ b/vlib/v/markused/markused.v @@ -212,6 +212,9 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a core_fns << '__print_assert_failure' core_fns << 'isnil' } + if table.used_features.type_name { + core_fns << charptr_idx_str + '.vstring_literal' + } if pref_.trace_calls || pref_.trace_fns.len > 0 { include_panic_deps = true core_fns << 'vgettid' diff --git a/vlib/v/tests/skip_unused/sumtype_type_name.run.out b/vlib/v/tests/skip_unused/sumtype_type_name.run.out new file mode 100644 index 0000000000..58c8fd6ddf --- /dev/null +++ b/vlib/v/tests/skip_unused/sumtype_type_name.run.out @@ -0,0 +1,2 @@ +Dbv +string diff --git a/vlib/v/tests/skip_unused/sumtype_type_name.skip_unused.run.out b/vlib/v/tests/skip_unused/sumtype_type_name.skip_unused.run.out new file mode 100644 index 0000000000..58c8fd6ddf --- /dev/null +++ b/vlib/v/tests/skip_unused/sumtype_type_name.skip_unused.run.out @@ -0,0 +1,2 @@ +Dbv +string diff --git a/vlib/v/tests/skip_unused/sumtype_type_name.vv b/vlib/v/tests/skip_unused/sumtype_type_name.vv new file mode 100644 index 0000000000..e51630f245 --- /dev/null +++ b/vlib/v/tests/skip_unused/sumtype_type_name.vv @@ -0,0 +1,9 @@ +module main + +type Dbv = int | string + +fn main() { + mut m := Dbv('foo') + println(typeof(m).name) + println(m.type_name()) +}