1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

compiler: handles printing of structures and arrays of structures

This commit is contained in:
Henrixounez
2019-08-22 06:56:29 +02:00
committed by Alexander Medvednikov
parent 232532ba3b
commit 780ddaf22b
3 changed files with 50 additions and 2 deletions

View File

@@ -253,6 +253,9 @@ fn (p mut Parser) gen_array_str(typ mut Type) {
})
t := typ.name
elm_type := t.right(6)
if p.typ_to_fmt(elm_type, 0) == '' && !p.table.type_has_method(p.table.find_type(elm_type), 'str') {
p.error('cant print ${elm_type}[], unhandled print of ${elm_type}')
}
p.cgen.fns << '
string ${t}_str($t a) {
strings__Builder sb = strings__new_builder(a.len * 3);

View File

@@ -2547,7 +2547,18 @@ fn (p mut Parser) string_expr() {
else {
f := p.typ_to_fmt(typ, 0)
if f == '' {
p.error('unhandled sprintf format "$typ" ')
is_array := typ.starts_with('array_')
has_str_method := p.table.type_has_method(p.table.find_type(typ), 'str')
if is_array || has_str_method {
if is_array && !has_str_method {
p.gen_array_str(mut p.table.find_type(typ))
}
args = args.all_before_last(val) + '${typ}_str(${val}).len, ${typ}_str(${val}).str'
format += '%.*s '
}
else {
p.error('unhandled sprintf format "$typ" ')
}
}
format += f
}