commit e58ae03
uint
·
2026-10-23 21:43:51 +0000 UTC
parent a355e02
expl_parse parses whole file, not just expression
1 files changed,
+12,
-14
M
expl.c
M
expl.c
+12,
-14
1@@ -230,27 +230,25 @@ freenode(expl_node* node)
2 expl_node*
3 expl_parse(const char* source)
4 {
5- expl_node* node = NULL;
6 parser p = { 0 };
7+ expl_node* head = NULL;
8+ expl_node** next = &head;
9+
10 p.src = source;
11
12 skipspace(&p);
13- if (current_char(&p, '('))
14- node = list(&p);
15- else
16- node = expression(&p);
17-
18- if (!node)
19- return NULL;
20+ while (!current_char(&p, '\0')) {
21+ *next = expression(&p);
22+ if (!*next) {
23+ freenode(head);
24+ return NULL;
25+ }
26
27- skipspace(&p);
28- if (!current_char(&p, '\0')) {
29- freenode(node);
30- p.err = EXPL_ERR_UNEXPECTED_TOKEN;
31- return NULL;
32+ next = &(*next)->next;
33+ skipspace(&p);
34 }
35
36- return node;
37+ return head;
38 }
39
40 void