Skip to content

Commit aa9dd70

Browse files
committed
v2: transformer: lower ForInStmt
1 parent 7096511 commit aa9dd70

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

‎vlib/v2/transformer/transformer.v‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5466,12 +5466,12 @@ fn (t &Transformer) strip_pos(e ast.Expr) ast.Expr {
54665466
}
54675467
}
54685468

5469-
fn (mut t Transformer) transform_for_in_stmt(stmt ast.ForInStmt) ast.ForInStmt {
5470-
return ast.ForInStmt{
5471-
key: stmt.key
5472-
value: stmt.value
5473-
expr: t.transform_expr(stmt.expr)
5474-
}
5469+
fn (mut t Transformer) transform_for_in_stmt(stmt ast.ForInStmt) ast.ForStmt {
5470+
// ForInStmt is only a ForStmt initializer in v2 AST; lower stray ForInStmt
5471+
// nodes through the regular for-loop transformer path.
5472+
return t.transform_for_stmt(ast.ForStmt{
5473+
init: ast.Stmt(stmt)
5474+
})
54755475
}
54765476

54775477
fn (mut t Transformer) transform_return_stmt(stmt ast.ReturnStmt) ast.ReturnStmt {
@@ -9625,6 +9625,7 @@ fn match_sumtype_variant_name(candidate string, variants []string) string {
96259625
}
96269626
return ''
96279627
}
9628+
96289629
fn (mut t Transformer) transform_infix_expr(expr ast.InfixExpr) ast.Expr {
96299630
// Preserve short-circuit semantics while making smartcasts available to all
96309631
// following terms in `&&` chains (including multiple `is` checks).

‎vlib/v2/transformer/transformer_test.v‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,3 +850,18 @@ fn test_transform_if_expr_preserves_else() {
850850
assert false, 'expected IfExpr or UnsafeExpr, got ${result.type_name()}'
851851
}
852852
}
853+
854+
fn test_transform_for_in_stmt_lowers_to_for_stmt() {
855+
mut t := create_test_transformer()
856+
result := t.transform_for_in_stmt(ast.ForInStmt{
857+
value: ast.Ident{
858+
name: 'v'
859+
}
860+
expr: ast.Ident{
861+
name: 'items'
862+
}
863+
})
864+
865+
// NOTE: transform_for_in_stmt returns `ast.ForStmt` directly.
866+
assert result.init is ast.AssignStmt, 'expected lowered init AssignStmt, got ${result.init.type_name()}'
867+
}

0 commit comments

Comments
 (0)