aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 53cc615ad..b7c813bac 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -6637,11 +6637,47 @@ gbString write_expr_to_string(gbString str, AstNode *node) {
case_end;
case_ast_node(f, FieldList, node);
+ bool has_name = false;
+ for_array(i, f->list) {
+ ast_node(field, Field, f->list[i]);
+ if (field->names.count > 1) {
+ has_name = true;
+ break;
+ }
+
+ if (field->names.count == 0) {
+ continue;
+ }
+ AstNode *name = field->names[0];
+ ast_node(n, Ident, name);
+ if (n->string != "_") {
+ has_name = true;
+ break;
+ }
+ }
+
+
for_array(i, f->list) {
if (i > 0) {
str = gb_string_appendc(str, ", ");
}
- str = write_expr_to_string(str, f->list[i]);
+ if (has_name) {
+ str = write_expr_to_string(str, f->list[i]);
+ } else {
+ ast_node(field, Field, f->list[i]);
+
+ if (field->flags&FieldFlag_using) {
+ str = gb_string_appendc(str, "using ");
+ }
+ if (field->flags&FieldFlag_no_alias) {
+ str = gb_string_appendc(str, "#no_alias ");
+ }
+ if (field->flags&FieldFlag_c_vararg) {
+ str = gb_string_appendc(str, "#c_vararg ");
+ }
+
+ str = write_expr_to_string(str, field->type);
+ }
}
case_end;
@@ -6670,6 +6706,11 @@ gbString write_expr_to_string(gbString str, AstNode *node) {
str = gb_string_appendc(str, "proc(");
str = write_expr_to_string(str, pt->params);
str = gb_string_appendc(str, ")");
+ if (pt->results != NULL) {
+ str = gb_string_appendc(str, " -> ");
+ str = write_expr_to_string(str, pt->results);
+ }
+
case_end;
case_ast_node(st, StructType, node);