Skip to content

Commit 2378b71

Browse files
authored
cgen: fix comptime if expr with optional or result call (#16853)
1 parent 09766c4 commit 2378b71

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

vlib/v/gen/c/comptime.v

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ fn (mut g Gen) comptime_if(node ast.IfExpr) {
278278
line := if node.is_expr {
279279
stmt_str := g.go_before_stmt(0)
280280
g.write(util.tabs(g.indent))
281+
styp := g.typ(node.typ)
282+
g.writeln('${styp} ${tmp_var};')
281283
stmt_str.trim_space()
282284
} else {
283285
''
@@ -320,21 +322,27 @@ fn (mut g Gen) comptime_if(node ast.IfExpr) {
320322
len := branch.stmts.len
321323
if len > 0 {
322324
last := branch.stmts.last() as ast.ExprStmt
323-
styp := g.typ(node.typ)
324325
if len > 1 {
325326
g.indent++
326-
g.writeln('${styp} ${tmp_var};')
327327
g.writeln('{')
328328
g.stmts(branch.stmts[..len - 1])
329+
g.set_current_pos_as_last_stmt_pos()
330+
prev_skip_stmt_pos := g.skip_stmt_pos
331+
g.skip_stmt_pos = true
329332
g.write('\t${tmp_var} = ')
330333
g.stmt(last)
334+
g.skip_stmt_pos = prev_skip_stmt_pos
331335
g.writeln(';')
332336
g.writeln('}')
333337
g.indent--
334338
} else {
335339
g.indent++
336-
g.write('${styp} ${tmp_var} = ')
340+
g.set_current_pos_as_last_stmt_pos()
341+
prev_skip_stmt_pos := g.skip_stmt_pos
342+
g.skip_stmt_pos = true
343+
g.write('${tmp_var} = ')
337344
g.stmt(last)
345+
g.skip_stmt_pos = prev_skip_stmt_pos
338346
g.writeln(';')
339347
g.indent--
340348
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import os
2+
3+
fn test_comptime_if_expr_with_result_call() {
4+
config_dir := $if windows {
5+
os.home_dir()
6+
} $else {
7+
os.config_dir() or { os.home_dir() }
8+
}
9+
println(config_dir)
10+
assert true
11+
}

0 commit comments

Comments
 (0)