cgen: fix match sumtype print var aggregate error (#12667)
parent
4624de6cb5
commit
365b46cad3
|
@ -832,11 +832,20 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if node.left is ast.Ident && g.comptime_var_type_map.len > 0 {
|
} else if node.left is ast.Ident {
|
||||||
if node.left.obj is ast.Var {
|
if node.left.obj is ast.Var {
|
||||||
|
if g.comptime_var_type_map.len > 0 {
|
||||||
rec_type = node.left.obj.typ
|
rec_type = node.left.obj.typ
|
||||||
g.gen_expr_to_string(node.left, rec_type)
|
g.gen_expr_to_string(node.left, rec_type)
|
||||||
return
|
return
|
||||||
|
} else if node.left.obj.smartcasts.len > 0 {
|
||||||
|
cast_sym := g.table.get_type_symbol(node.left.obj.smartcasts.last())
|
||||||
|
if cast_sym.info is ast.Aggregate {
|
||||||
|
rec_type = cast_sym.info.types[g.aggregate_type_idx]
|
||||||
|
g.gen_expr_to_string(node.left, rec_type)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.get_str_fn(rec_type)
|
g.get_str_fn(rec_type)
|
||||||
|
@ -1175,6 +1184,12 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
|
||||||
} else if expr is ast.Ident {
|
} else if expr is ast.Ident {
|
||||||
if expr.obj is ast.Var {
|
if expr.obj is ast.Var {
|
||||||
typ = expr.obj.typ
|
typ = expr.obj.typ
|
||||||
|
if expr.obj.smartcasts.len > 0 {
|
||||||
|
cast_sym := g.table.get_type_symbol(expr.obj.smartcasts.last())
|
||||||
|
if cast_sym.info is ast.Aggregate {
|
||||||
|
typ = cast_sym.info.types[g.aggregate_type_idx]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.gen_expr_to_string(expr, typ)
|
g.gen_expr_to_string(expr, typ)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
type Bug = i64 | u64
|
||||||
|
|
||||||
|
fn test_match_sumtype_var_aggregate_print_var() {
|
||||||
|
f := Bug(i64(-17))
|
||||||
|
ret := match f {
|
||||||
|
u64, i64 {
|
||||||
|
println(f)
|
||||||
|
println(f.str())
|
||||||
|
f.str()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert ret == '-17'
|
||||||
|
}
|
Loading…
Reference in New Issue