diff options
Diffstat (limited to 'src/nodes.c')
-rw-r--r-- | src/nodes.c | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/src/nodes.c b/src/nodes.c deleted file mode 100644 index 6978acc..0000000 --- a/src/nodes.c +++ /dev/null | |||
@@ -1,133 +0,0 @@ | |||
1 | #include "nodes.h" | ||
2 | |||
3 | static size_t node_gen_id = 0; | ||
4 | |||
5 | Node * | ||
6 | alloc_node(NodeType type) { | ||
7 | // TODO: Use a bump allocator? | ||
8 | // TODO: Free memory! | ||
9 | Node *node = malloc(sizeof(Node)); | ||
10 | node->id = node_gen_id++; | ||
11 | node->type = type; | ||
12 | node->line = 0; | ||
13 | node->col = 0; | ||
14 | node->expr_type = NULL; | ||
15 | return node; | ||
16 | } | ||
17 | |||
18 | void | ||
19 | print_node(Node *node) { | ||
20 | if (node == NULL) { | ||
21 | return; | ||
22 | } | ||
23 | switch (node->type) { | ||
24 | case NODE_NUMBER: { | ||
25 | if (node->number.negative) { | ||
26 | printf("-"); | ||
27 | } | ||
28 | if (node->number.fractional != 0) { | ||
29 | printf("%zu.%zu", node->number.integral, node->number.fractional); | ||
30 | } else { | ||
31 | printf("%zu", node->number.integral); | ||
32 | } | ||
33 | } break; | ||
34 | case NODE_SYMBOL: | ||
35 | case NODE_TYPE: | ||
36 | case NODE_STRING: { | ||
37 | sv_write(&node->string); | ||
38 | } break; | ||
39 | case NODE_BOOL: { | ||
40 | if (node->boolean) { | ||
41 | printf("true"); | ||
42 | } else { | ||
43 | printf("false"); | ||
44 | } | ||
45 | } break; | ||
46 | case NODE_BUILTIN: { | ||
47 | printf("({%s}", token_str[node->builtin.type]); | ||
48 | size_t n_args = array_size(node->builtin.args); | ||
49 | if (n_args != 0) { | ||
50 | printf(" "); | ||
51 | } | ||
52 | for (size_t i = 0; i < n_args; ++i) { | ||
53 | print_node(node->builtin.args[i]); | ||
54 | if (i < n_args - 1) { | ||
55 | printf(" "); | ||
56 | } | ||
57 | } | ||
58 | printf(")"); | ||
59 | } break; | ||
60 | case NODE_DEF: { | ||
61 | printf("(def "); | ||
62 | print_node(node->def.symbol); | ||
63 | printf(":"); | ||
64 | print_node(node->def.type); | ||
65 | printf(" "); | ||
66 | print_node(node->def.value); | ||
67 | printf(")"); | ||
68 | } break; | ||
69 | case NODE_SET: { | ||
70 | printf("(set "); | ||
71 | print_node(node->def.symbol); | ||
72 | printf(" "); | ||
73 | print_node(node->def.value); | ||
74 | printf(")"); | ||
75 | } break; | ||
76 | case NODE_BLOCK: { | ||
77 | size_t n_expr = array_size(node->block.expr); | ||
78 | printf("{"); | ||
79 | for (size_t i = 0; i < n_expr; ++i) { | ||
80 | printf(" "); | ||
81 | print_node(node->block.expr[i]); | ||
82 | } | ||
83 | printf(" }"); | ||
84 | } break; | ||
85 | case NODE_IF: { | ||
86 | printf("(if "); | ||
87 | print_node(node->ifexpr.cond); | ||
88 | printf(" "); | ||
89 | print_node(node->ifexpr.expr_true); | ||
90 | if (node->ifexpr.expr_false != NULL) { | ||
91 | printf(" "); | ||
92 | print_node(node->ifexpr.expr_false); | ||
93 | } | ||
94 | printf(")"); | ||
95 | } break; | ||
96 | case NODE_FUN: { | ||
97 | printf("(fun "); | ||
98 | print_node(node->fun.name); | ||
99 | printf(" ("); | ||
100 | size_t n_params = array_size(node->fun.param_names); | ||
101 | for (size_t i = 0; i < n_params; ++i) { | ||
102 | print_node(node->fun.param_names[i]); | ||
103 | printf(":"); | ||
104 | print_node(node->fun.param_types[i]); | ||
105 | if (i < n_params - 1) { | ||
106 | printf(" "); | ||
107 | } | ||
108 | } | ||
109 | printf(")"); | ||
110 | printf(": "); | ||
111 | print_node(node->fun.return_type); | ||
112 | printf(" "); | ||
113 | print_node(node->fun.body); | ||
114 | printf(")"); | ||
115 | } break; | ||
116 | case NODE_FUNCALL: { | ||
117 | printf("("); | ||
118 | print_node(node->funcall.name); | ||
119 | size_t n_args = array_size(node->funcall.args); | ||
120 | if (n_args != 0) { | ||
121 | printf(" "); | ||
122 | } | ||
123 | for (size_t i = 0; i < n_args; ++i) { | ||
124 | print_node(node->funcall.args[i]); | ||
125 | if (i < n_args - 1) { | ||
126 | printf(" "); | ||
127 | } | ||
128 | } | ||
129 | printf(")"); | ||
130 | } break; | ||
131 | default: { printf("{#unknown#}"); } break; | ||
132 | } | ||
133 | } | ||