From 6915a5a1b54472df81edef9703962650a302ca38 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Tue, 29 Jul 2025 12:48:09 -0300 Subject: [PATCH] markused: clean up map fns handling (#24998) --- vlib/v/markused/markused.v | 35 ----------------------------- vlib/v/markused/walker.v | 45 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 35 deletions(-) diff --git a/vlib/v/markused/markused.v b/vlib/v/markused/markused.v index 2169b7ee02..c78b7061b5 100644 --- a/vlib/v/markused/markused.v +++ b/vlib/v/markused/markused.v @@ -359,41 +359,6 @@ pub fn mark_used(mut table ast.Table, mut pref_ pref.Preferences, ast_files []&a walker.used_fns.delete('${int(ast.none_type)}.str') } - if table.used_features.used_maps > 0 { - for k, mut mfn in all_fns { - mut method_receiver_typename := '' - if mfn.is_method { - method_receiver_typename = table.type_to_str(mfn.receiver.typ) - } - if k in ['new_map', 'new_map_init', 'map_hash_string'] - || method_receiver_typename == '&map' || method_receiver_typename == '&DenseArray' - || k.starts_with('map_') { - walker.fn_decl(mut mfn) - } - if pref_.gc_mode in [.boehm_full_opt, .boehm_incr_opt] { - if k in ['new_map_noscan_key', 'new_map_noscan_value', 'new_map_noscan_key_value', - 'new_map_init_noscan_key', 'new_map_init_noscan_value', - 'new_map_init_noscan_key_value'] { - walker.fn_decl(mut mfn) - } - } - } - } else { - for map_fn_name in ['new_map', 'new_map_init', 'map_hash_string', 'new_dense_array', - 'new_dense_array_noscan'] { - walker.used_fns.delete(map_fn_name) - } - for k, mut mfn in all_fns { - if !mfn.is_method { - continue - } - method_receiver_typename := table.type_to_str(mfn.receiver.typ) - if method_receiver_typename in ['&map', '&mapnode', '&SortedMap', '&DenseArray'] { - walker.used_fns.delete(k) - } - } - } - table.used_features.used_fns = walker.used_fns.move() table.used_features.used_consts = walker.used_consts.move() table.used_features.used_globals = walker.used_globals.move() diff --git a/vlib/v/markused/walker.v b/vlib/v/markused/walker.v index 3d21be8b0f..c55556012b 100644 --- a/vlib/v/markused/walker.v +++ b/vlib/v/markused/walker.v @@ -1313,6 +1313,7 @@ fn (mut w Walker) mark_resource_dependencies() { eprintln('>>>>>>>>>> ALL_FNS LOOP') } mut has_ptr_print := false + mut map_fns := map[string]ast.FnDecl{} has_str_call := w.uses_interp || w.uses_asserts || w.uses_str.len > 0 || w.features.print_types.len > 0 for k, mut func in w.all_fns { @@ -1349,6 +1350,50 @@ fn (mut w Walker) mark_resource_dependencies() { continue } } + if func.is_method && !func.receiver.typ.has_flag(.generic) && func.receiver.typ.is_ptr() { + method_receiver_typename := w.table.type_to_str(func.receiver.typ) + if method_receiver_typename in ['&map', '&mapnode', '&SortedMap', '&DenseArray'] { + map_fns[k] = func + } + } else if k.starts_with('map_') { + map_fns[k] = func + } + } + if w.features.used_maps > 0 { + w.fn_by_name('new_map') + w.fn_by_name('new_map_init') + w.fn_by_name('map_hash_string') + + if w.pref.gc_mode in [.boehm_full_opt, .boehm_incr_opt] { + w.fn_by_name('new_map_noscan_key') + w.fn_by_name('new_map_noscan_value') + w.fn_by_name('new_map_noscan_key_value') + w.fn_by_name('new_map_init_noscan_key') + w.fn_by_name('new_map_init_noscan_value') + w.fn_by_name('new_map_init_noscan_key_value') + } + for _, mut func in map_fns { + if !func.is_method { + w.fn_decl(mut func) + } else { + method_receiver_typename := w.table.type_to_str(func.receiver.typ) + if method_receiver_typename in ['&map', '&DenseArray'] { + w.fn_decl(mut func) + } + } + } + } else { + for k, func in map_fns { + if !func.is_method { + continue + } + w.used_fns.delete(k) + } + w.used_fns.delete('new_map') + w.used_fns.delete('new_map_init') + w.used_fns.delete('map_hash_string') + w.used_fns.delete('new_dense_array') + w.used_fns.delete('new_dense_array_noscan') } }