diff options
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index f6530df51..aa3d67dae 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -10633,7 +10633,26 @@ gbString write_expr_to_string(gbString str, Ast *node, bool shorthand) { str = gb_string_appendc(str, ")"); if (pt->results != nullptr) { str = gb_string_appendc(str, " -> "); + + bool parens_needed = false; + if (pt->results && pt->results->kind == Ast_FieldList) { + for_array(i, pt->results->FieldList.list) { + Ast *field = pt->results->FieldList.list[i]; + ast_node(f, Field, field); + if (f->names.count != 0) { + parens_needed = true; + break; + } + } + } + + if (parens_needed) { + str = gb_string_append_rune(str, '('); + } str = write_expr_to_string(str, pt->results, shorthand); + if (parens_needed) { + str = gb_string_append_rune(str, ')'); + } } case_end; |