@@ -1073,9 +1073,21 @@ fn (mut g Gen) change_comptime_args(func ast.Fn, mut node_ ast.CallExpr, concret
1073
1073
mut ctyp := g.get_comptime_var_type (call_arg.expr)
1074
1074
if ctyp != ast.void_type {
1075
1075
arg_sym := g.table.sym (ctyp)
1076
- if arg_sym.kind == .array && param_typ.has_flag (.generic)
1077
- && g.table.final_sym (param_typ).kind == .array {
1078
- ctyp = (arg_sym.info as ast.Array ).elem_type
1076
+ param_sym := g.table.final_sym (param_typ)
1077
+ if arg_sym.info is ast.Array && param_sym.kind == .array {
1078
+ ctyp = arg_sym.info.elem_type
1079
+ } else if arg_sym.info is ast.Map && param_sym.info is ast.Map {
1080
+ if call_arg.expr.obj.ct_type_var == .value_var {
1081
+ ctyp = arg_sym.info.value_type
1082
+ if param_sym.info.value_type.nr_muls () > 0 && ctyp.nr_muls () > 0 {
1083
+ ctyp = ctyp.set_nr_muls (0 )
1084
+ }
1085
+ } else if call_arg.expr.obj.ct_type_var == .key_var {
1086
+ ctyp = arg_sym.info.key_type
1087
+ if param_sym.info.key_type.nr_muls () > 0 && ctyp.nr_muls () > 0 {
1088
+ ctyp = ctyp.set_nr_muls (0 )
1089
+ }
1090
+ }
1079
1091
}
1080
1092
comptime_args[i] = ctyp
1081
1093
}
@@ -1113,9 +1125,9 @@ fn (mut g Gen) change_comptime_args(func ast.Fn, mut node_ ast.CallExpr, concret
1113
1125
}
1114
1126
}
1115
1127
} else if arg_sym.kind == .any {
1116
- mut cparam_type_sym := g.table.sym (g.unwrap_generic (ctyp))
1117
- if param_typ_sym.kind == .array && cparam_type_sym.kind == .array {
1118
- ctyp = ( cparam_type_sym.info as ast.Array ) .elem_type
1128
+ cparam_type_sym := g.table.sym (g.unwrap_generic (ctyp))
1129
+ if param_typ_sym.kind == .array && cparam_type_sym.info is ast.Array {
1130
+ ctyp = cparam_type_sym.info.elem_type
1119
1131
comptime_args[i] = ctyp
1120
1132
} else {
1121
1133
if node_.args[i].expr.is_auto_deref_var () {
0 commit comments