Skip to content

Commit 7dc3889

Browse files
authored
markused: fix printing smartcasted interface values (fix #24579) (#24583)
1 parent c91cb87 commit 7dc3889

4 files changed

Lines changed: 54 additions & 0 deletions

File tree

‎vlib/v/checker/used_features.v‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,16 @@ fn (mut c Checker) markused_fn_call(mut node ast.CallExpr) {
138138
c.table.used_features.option_or_result = true
139139
}
140140
c.table.used_features.print_types[node.args[0].typ.idx()] = true
141+
if !c.table.used_features.auto_str_ptr && node.args[0].expr is ast.Ident {
142+
var_obj := node.args[0].expr.obj
143+
if var_obj is ast.Var {
144+
if var_obj.orig_type != 0
145+
&& c.table.final_sym(var_obj.orig_type).kind == .interface {
146+
c.table.used_features.auto_str_ptr = true
147+
return
148+
}
149+
}
150+
}
141151
}
142152
if node.args[0].typ.is_ptr() {
143153
c.table.used_features.auto_str_ptr = true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
&xxx 1:1:1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
&xxx 1:1:1
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
module main
2+
3+
pub struct MyError implements IError {
4+
pub:
5+
msg string
6+
code int
7+
domain int
8+
level int
9+
}
10+
11+
pub fn (e MyError) str() string {
12+
return '${e.msg} ${e.code}:${e.domain}:${e.level}'
13+
}
14+
15+
pub fn (e MyError) msg() string {
16+
return e.msg
17+
}
18+
19+
pub fn (e MyError) code() int {
20+
return e.code
21+
}
22+
23+
fn MyError.new(msg string, code int, domain int, level int) MyError {
24+
return MyError{
25+
msg: msg
26+
code: code
27+
domain: domain
28+
level: level
29+
}
30+
}
31+
32+
fn foo() ! {
33+
return MyError.new('xxx', 1, 1, 1)
34+
}
35+
36+
fn main() {
37+
foo() or {
38+
if err is MyError {
39+
eprintln(err)
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)