Skip to content

Commit 76e60fb

Browse files
committed
fix alias, chan
1 parent a595c85 commit 76e60fb

1 file changed

Lines changed: 37 additions & 6 deletions

File tree

vlib/v/builder/auto_fn.v

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ fn (mut b Builder) gen_auto_str_fn() {
6262
already_gen_str_map[type_name] = true
6363
}
6464
}
65+
.alias {
66+
info := t.info as ast.Alias
67+
hint := 'type=${t.idx}\nt.name=${t.name}'
68+
if type_name !in already_gen_str_map {
69+
b.gen_str_for_alias(mut sb, type_name, type_name2, info, hint)
70+
already_gen_str_map[type_name] = true
71+
}
72+
}
6573
else {}
6674
}
6775
}
@@ -131,21 +139,25 @@ fn (mut b Builder) gen_str_for_struct(mut sb strings.Builder, struct_name string
131139
sb.writeln('\trlock it.${f.name} {')
132140
}
133141
if f.typ == ast.string_type {
134-
sb.writeln('\tres.write_string(\' ${f.name}: \\\'\${it.${f.name}}\\\'\\n\')')
142+
sb.writeln('\tres.write_string(\'${f.name}: \\\'\${it.${f.name}}\\\'\\n\')')
135143
} else {
136144
sym := b.table.sym(f.typ)
137145
if sym.kind == .struct {
138146
if f.typ.has_flag(.option) {
139147
sb.writeln('\tif option_f := it.${f.name} {')
140-
sb.writeln("\t\tres.writeln(' ${f.name}: Option(\${option_f})')")
148+
sb.writeln("\t\tres.writeln('${f.name}: Option(\${option_f})')")
141149
sb.writeln('\t}\n\telse {')
142-
sb.writeln("\t\tres.writeln(' ${f.name}: Option(none)')")
150+
sb.writeln("\t\tres.writeln('${f.name}: Option(none)')")
143151
sb.writeln('\t}')
144152
} else {
145-
sb.writeln("\tres.writeln(' ${f.name}: \${it.${f.name}}')")
153+
sb.writeln("\tres.writeln('${f.name}: \${it.${f.name}}')")
146154
}
155+
} else if sym.kind == .chan {
156+
elem_info := sym.info as ast.Chan
157+
elem_type_str := b.table.type_to_str(elem_info.elem_type)
158+
sb.writeln("\tres.writeln('${f.name}: chan ${elem_type_str}{cap: \${it.${f.name}.cap}, closed: \${it.${f.name}.closed}}')")
147159
} else {
148-
sb.writeln("\tres.writeln(' ${f.name}: \${it.${f.name}}')")
160+
sb.writeln("\tres.writeln('${f.name}: \${it.${f.name}}')")
149161
}
150162
}
151163
if f.typ.has_flag(.shared_f) {
@@ -159,6 +171,25 @@ fn (mut b Builder) gen_str_for_struct(mut sb strings.Builder, struct_name string
159171
sb.writeln('\treturn sb.str()\n}')
160172
}
161173

174+
fn (mut b Builder) gen_str_for_alias(mut sb strings.Builder, alias_name string, alias_name2 string, info ast.Alias, hint string) {
175+
sb.writeln('/*${hint}*/')
176+
// -hide-auto-str hides potential sensitive struct data from resulting binary files
177+
if b.pref.hide_auto_str {
178+
sb.writeln("@[markused]\npub fn (it ${alias_name}) str() string { return 'str() used with -hide-auto-str' }")
179+
return
180+
}
181+
parent_type_name := b.table.type_to_str(info.parent_type)
182+
sb.writeln('@[markused]\npub fn (it ${alias_name}) str() string {')
183+
sb.writeln('\tparent_it := *(&${parent_type_name}(&it))')
184+
sb.writeln('\tmut res := strings.new_builder(222)')
185+
sb.writeln("\tres.write_string(' ${alias_name2}(\${parent_it})')")
186+
// sb.writeln('\t// note: this can be removed after move dump beyond cgen')
187+
// sb.writeln('\tmut sb := strings.new_builder(222)')
188+
// sb.writeln('\tsb.indent(res.str())')
189+
// sb.writeln('\treturn sb.str()\n}')
190+
sb.writeln('\treturn res.str()\n}')
191+
}
192+
162193
fn (b Builder) get_mod_full_path(full_mod_name string) string {
163194
for f in b.parsed_files {
164195
if f.mod.name == full_mod_name {
@@ -169,7 +200,7 @@ fn (b Builder) get_mod_full_path(full_mod_name string) string {
169200
}
170201

171202
fn (mut b Builder) auto_fn_get_type_name(t &ast.TypeSymbol, is_get_type_name bool) string {
172-
mut type_name := t.name
203+
mut type_name := t.name.all_after_last('.')
173204
if t.kind == .struct {
174205
// main.MyS[int] => MyS[T]
175206
info := t.info as ast.Struct

0 commit comments

Comments
 (0)