diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 0c5c23f69a..bbe2950f62 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4358,7 +4358,7 @@ fn (mut c Checker) for_in_stmt(mut node ast.ForInStmt) { } node.scope.update_var_type(node.val_var, node.val_type) } else { - sym := c.table.get_type_symbol(typ) + sym := c.table.get_final_type_symbol(typ) if sym.kind == .struct_ { // iterators next_fn := sym.find_method('next') or { diff --git a/vlib/v/tests/for_in_alias_test.v b/vlib/v/tests/for_in_alias_test.v new file mode 100644 index 0000000000..af5ce8b45e --- /dev/null +++ b/vlib/v/tests/for_in_alias_test.v @@ -0,0 +1,26 @@ +enum Nucleotide { + a + c + g + t +} + +type Codon = []Nucleotide +type Gene = []Codon + +fn test_for_in_alias() { + mut gene := Gene([ + Codon([Nucleotide.a, Nucleotide.c, Nucleotide.g]), + Codon([Nucleotide.g, Nucleotide.a, Nucleotide.t]), + ]) + + mut ret := []string{} + for cdn in gene { + println(cdn) + ret << '$cdn' + } + + assert ret.len == 2 + assert ret[0] == 'Codon([a, c, g])' + assert ret[1] == 'Codon([g, a, t])' +}