aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-06-18 23:16:57 +0100
committerGinger Bill <bill@gingerbill.org>2017-06-18 23:16:57 +0100
commit126f7aa8923b6517c1c7a650ee6c0a374fa293da (patch)
tree74e93bf5bd1d6aa7c772df42b7797e08cf5144c7 /src/check_expr.cpp
parent2957f007e34ed7e2704a40c9e7af9148aebcdf23 (diff)
Begin work on documentation generation
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);