diff --git a/vlib/v/gen/c/utils.v b/vlib/v/gen/c/utils.v index 79f6bc0a2d..e2513b3d95 100644 --- a/vlib/v/gen/c/utils.v +++ b/vlib/v/gen/c/utils.v @@ -7,22 +7,24 @@ import v.ast fn (mut g Gen) unwrap_generic(typ ast.Type) ast.Type { if typ.has_flag(.generic) { - /* - resolve_generic_to_concrete should not mutate the table. - It mutates if the generic type is for example []T and the - concrete type is an array type that has not been registered - yet. This should have already happened in the checker, since - it also calls resolve_generic_to_concrete. g.table is made - non-mut to make sure no one else can accidentally mutates the table. - */ - mut muttable := unsafe { &ast.Table(g.table) } - if t_typ := muttable.resolve_generic_to_concrete(typ, if unsafe { g.cur_fn != 0 } { - g.cur_fn.generic_names - } else { - []string{} - }, g.cur_concrete_types) - { - return t_typ + // NOTE: `resolve_generic_to_concrete` should not mutate the table. + // + // It mutates if the generic type is for example `[]T` and the concrete + // type is an array type that has not been registered yet. + // + // This should have already happened in the checker, since it also calls + // `resolve_generic_to_concrete`. `g.table` is made non-mut to make sure + // no one else can accidentally mutates the table. + unsafe { + mut mut_table := &ast.Table(g.table) + if t_typ := mut_table.resolve_generic_to_concrete(typ, if g.cur_fn != nil { + g.cur_fn.generic_names + } else { + []string{} + }, g.cur_concrete_types) + { + return t_typ + } } } return typ