@@ -271,6 +271,8 @@ fn (mut c Checker) comptime_for(mut node ast.ComptimeFor) {
271
271
return
272
272
}
273
273
}
274
+ has_different_types := fields.len > 1
275
+ && ! fields.all (c.check_basic (it .typ, fields[0 ].typ))
274
276
for field in fields {
275
277
c.push_new_comptime_info ()
276
278
c.comptime.inside_comptime_for = true
@@ -283,6 +285,7 @@ fn (mut c Checker) comptime_for(mut node ast.ComptimeFor) {
283
285
c.type_resolver.update_ct_type (node.val_var, c.field_data_type)
284
286
c.type_resolver.update_ct_type ('${node.val_var} .typ' , node.typ)
285
287
c.comptime.comptime_for_field_type = field.typ
288
+ c.comptime.has_different_types = has_different_types
286
289
c.stmts (mut node.stmts)
287
290
288
291
unwrapped_expr_type := c.unwrap_generic (field.typ)
@@ -809,6 +812,7 @@ fn (mut c Checker) comptime_if_cond(mut cond ast.Expr, pos token.Pos) ComptimeBr
809
812
} else if cond.left in [ast.Ident, ast.SelectorExpr, ast.TypeNode] {
810
813
// `$if method.type is string`
811
814
c.expr (mut cond.left)
815
+ c.comptime.inside_comptime_if = true
812
816
if mut cond.left is ast.SelectorExpr && cond.right is ast.ComptimeType {
813
817
comptime_type := cond.right as ast.ComptimeType
814
818
if c.comptime.is_comptime_selector_type (cond.left) {
@@ -1075,6 +1079,8 @@ fn (mut c Checker) push_new_comptime_info() {
1075
1079
c.type_resolver.info_stack << type_resolver.ResolverInfo{
1076
1080
saved_type_map: c.type_resolver.type_map.clone ()
1077
1081
inside_comptime_for: c.comptime.inside_comptime_for
1082
+ inside_comptime_if: c.comptime.inside_comptime_if
1083
+ has_different_types: c.comptime.has_different_types
1078
1084
comptime_for_variant_var: c.comptime.comptime_for_variant_var
1079
1085
comptime_for_field_var: c.comptime.comptime_for_field_var
1080
1086
comptime_for_field_type: c.comptime.comptime_for_field_type
@@ -1091,6 +1097,8 @@ fn (mut c Checker) pop_comptime_info() {
1091
1097
old := c.type_resolver.info_stack.pop ()
1092
1098
c.type_resolver.type_map = old.saved_type_map.clone ()
1093
1099
c.comptime.inside_comptime_for = old.inside_comptime_for
1100
+ c.comptime.inside_comptime_if = old.inside_comptime_if
1101
+ c.comptime.has_different_types = old.has_different_types
1094
1102
c.comptime.comptime_for_variant_var = old.comptime_for_variant_var
1095
1103
c.comptime.comptime_for_field_var = old.comptime_for_field_var
1096
1104
c.comptime.comptime_for_field_type = old.comptime_for_field_type
0 commit comments