aboutsummaryrefslogtreecommitdiffstats
path: root/src/nodes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nodes.c')
-rw-r--r--src/nodes.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/nodes.c b/src/nodes.c
index 855d186..fc39d8e 100644
--- a/src/nodes.c
+++ b/src/nodes.c
@@ -23,6 +23,7 @@ print_node(Node *node) {
23 } 23 }
24 } break; 24 } break;
25 case NODE_SYMBOL: 25 case NODE_SYMBOL:
26 case NODE_TYPE:
26 case NODE_STRING: { 27 case NODE_STRING: {
27 sv_write(&node->string); 28 sv_write(&node->string);
28 } break; 29 } break;
@@ -51,7 +52,7 @@ print_node(Node *node) {
51 printf("(def "); 52 printf("(def ");
52 print_node(node->def.symbol); 53 print_node(node->def.symbol);
53 printf(":"); 54 printf(":");
54 sv_write(&node->def.type); 55 print_node(node->def.type);
55 printf(" "); 56 printf(" ");
56 print_node(node->def.value); 57 print_node(node->def.value);
57 printf(")"); 58 printf(")");
@@ -63,6 +64,31 @@ print_node(Node *node) {
63 print_node(node->def.value); 64 print_node(node->def.value);
64 printf(")"); 65 printf(")");
65 } break; 66 } break;
67 case NODE_FUN: {
68 printf("(fun ");
69 print_node(node->fun.name);
70 printf(" (");
71 size_t n_params = array_size(node->fun.param_names);
72 for (size_t i = 0; i < n_params; ++i) {
73 print_node(node->fun.param_names[i]);
74 printf(":");
75 print_node(node->fun.param_types[i]);
76 if (i < n_params - 1) {
77 printf(" ");
78 }
79 }
80 printf(")");
81 printf(": ");
82 print_node(node->fun.return_type);
83
84 size_t n_expr = array_size(node->fun.body);
85 for (size_t i = 0; i < n_expr; ++i) {
86 printf(" ");
87 print_node(node->fun.body[i]);
88 }
89
90 printf(")");
91 } break;
66 default: { printf("{#unknown#}"); } break; 92 default: { printf("{#unknown#}"); } break;
67 } 93 }
68} 94}