Skip to content

Commit ed069c1

Browse files
committed
fix double generating or_block
1 parent 43ea096 commit ed069c1

3 files changed

Lines changed: 7 additions & 2 deletions

File tree

vlib/v/gen/c/assign.v

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,10 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
103103
mut return_type := ast.void_type
104104
is_decl := node.op == .decl_assign
105105
g.assign_op = node.op
106+
g.inside_assign = true
106107
defer {
107108
g.assign_op = .unknown
109+
g.inside_assign = false
108110
}
109111
op := if is_decl { token.Kind.assign } else { node.op }
110112
right_expr := node.right[0]

vlib/v/gen/c/cgen.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ mut:
120120
inside_ternary int // ?: comma separated statements on a single line
121121
inside_map_postfix bool // inside map++/-- postfix expr
122122
inside_map_infix bool // inside map<</+=/-= infix expr
123+
inside_assign bool
123124
inside_map_index bool
124125
inside_opt_or_res bool
125126
inside_opt_data bool
@@ -4123,7 +4124,7 @@ fn (mut g Gen) ident(node ast.Ident) {
41234124
styp := g.base_type(node.info.typ)
41244125
g.write('(*(${styp}*)${name}.data)')
41254126
}
4126-
if node.or_expr.kind != .absent {
4127+
if node.or_expr.kind != .absent && !(g.inside_assign && !g.is_assign_lhs) {
41274128
stmt_str := g.go_before_stmt(0).trim_space()
41284129
g.empty_line = true
41294130
g.or_block(name, node.or_expr, node.info.typ)

vlib/v/tests/option_var_2_test.v

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ fn test_option_var() {
1515
assert true
1616
}
1717

18+
mut counter := 0
1819
val := other or {
19-
println('without name')
20+
counter++
2021
'default'
2122
}
2223

2324
assert val == 'default'
25+
assert counter == 1
2426
}

0 commit comments

Comments
 (0)