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