mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: add temp (TODO) auto str for interfaces
This commit is contained in:
parent
9728abf4bc
commit
d094baf107
@ -55,6 +55,9 @@ fn (mut g Gen) gen_str_for_type(typ table.Type) string {
|
||||
table.SumType {
|
||||
g.gen_str_for_union_sum_type(sym.info, styp, str_fn_name)
|
||||
}
|
||||
table.Interface {
|
||||
g.gen_str_for_interface(sym.info, styp, str_fn_name)
|
||||
}
|
||||
else {
|
||||
verror("could not generate string method $str_fn_name for type '$styp'")
|
||||
}
|
||||
@ -449,7 +452,7 @@ fn (mut g Gen) gen_str_for_struct(info table.Struct, styp string, str_fn_name st
|
||||
|
||||
fn struct_auto_str_func(sym table.TypeSymbol, field_type table.Type, fn_name string, field_name string) string {
|
||||
has_custom_str := sym.has_method('str')
|
||||
if sym.kind == .enum_ {
|
||||
if sym.kind in [.enum_, .interface_] {
|
||||
return '${fn_name}(it.${c_name(field_name)})'
|
||||
} else if sym.kind == .struct_ {
|
||||
mut obj := 'it.${c_name(field_name)}'
|
||||
@ -506,6 +509,14 @@ fn (mut g Gen) gen_str_for_enum(info table.Enum, styp string, str_fn_name string
|
||||
g.auto_str_funcs.writeln('}')
|
||||
}
|
||||
|
||||
fn (mut g Gen) gen_str_for_interface(info table.Interface, styp string, str_fn_name string) {
|
||||
// TODO
|
||||
g.type_definitions.writeln('static string ${str_fn_name}($styp it); // auto')
|
||||
g.auto_str_funcs.writeln('static string ${str_fn_name}($styp it) { /* gen_str_for_interface */')
|
||||
g.auto_str_funcs.writeln('\treturn _SLIT("$styp{ /* TODO: Interface str */ }");')
|
||||
g.auto_str_funcs.writeln('}')
|
||||
}
|
||||
|
||||
fn (mut g Gen) gen_str_for_union_sum_type(info table.SumType, styp string, str_fn_name string) {
|
||||
mut gen_fn_names := map[string]string{}
|
||||
for typ in info.variants {
|
||||
|
@ -5483,7 +5483,7 @@ fn (g &Gen) type_to_fmt(typ table.Type) string {
|
||||
if typ.is_ptr() && (typ.is_int() || typ.is_float()) {
|
||||
return '%.*s\\000'
|
||||
} else if sym.kind in
|
||||
[.struct_, .array, .array_fixed, .map, .bool, .enum_, .sum_type, .function] {
|
||||
[.struct_, .array, .array_fixed, .map, .bool, .enum_, .interface_, .sum_type, .function] {
|
||||
return '%.*s\\000'
|
||||
} else if sym.kind == .string {
|
||||
return "\'%.*s\\000\'"
|
||||
|
@ -343,7 +343,7 @@ fn (mut g Gen) gen_expr_to_string(expr ast.Expr, etype table.Type) {
|
||||
g.write('")')
|
||||
}
|
||||
} else if sym_has_str_method || sym.kind in
|
||||
[.array, .array_fixed, .map, .struct_, .multi_return, .sum_type] {
|
||||
[.array, .array_fixed, .map, .struct_, .multi_return, .sum_type, .interface_] {
|
||||
is_ptr := typ.is_ptr()
|
||||
str_fn_name := g.gen_str_for_type(typ)
|
||||
if is_ptr {
|
||||
|
Loading…
Reference in New Issue
Block a user