commit f4df46b

Devine Lu Linvega  ·  2024-04-02 19:03:24 +0000 UTC
parent 6bc1232
Allow lambdas in macros
1 files changed,  +5, -2
+5, -2
 1@@ -165,6 +165,7 @@ makelambda(int id)
 2 static int
 3 makemacro(char *name, FILE *f, Context *ctx)
 4 {
 5+	int depth = 0;
 6 	char c;
 7 	Item *m;
 8 	if(macro_len >= 0x100) return error_asm("Macros limit exceeded");
 9@@ -175,9 +176,11 @@ makemacro(char *name, FILE *f, Context *ctx)
10 	m->content = dictnext;
11 	while(f && fread(&c, 1, 1, f) && c != '{')
12 		if(c == 0xa) ctx->line += 1;
13-	while(f && fread(&c, 1, 1, f) && c != '}') {
14+	while(f && fread(&c, 1, 1, f)) {
15 		if(c == 0xa) ctx->line += 1;
16 		if(c == '%') return error_top("Macro nested", name);
17+		if(c == '{') depth++;
18+		if(c == '}' && --depth) break;
19 		if(c == '(' && !walkcomment(f, ctx))
20 			return 0;
21 		else
22@@ -400,7 +403,7 @@ main(int argc, char *argv[])
23 {
24 	ptr = PAGE;
25 	copy("on-reset", scope, 0);
26-	if(argc == 2 && scmp(argv[1], "-v", 2)) return !fprintf(stdout, "Uxnasm - Uxntal Assembler, 30 Mar 2024.\n");
27+	if(argc == 2 && scmp(argv[1], "-v", 2)) return !fprintf(stdout, "Uxnasm - Uxntal Assembler, 2 Apr 2024.\n");
28 	if(argc != 3) return error_top("usage", "uxnasm [-v] input.tal output.rom");
29 	if(!assemble(argv[1])) return 1;
30 	if(!resolve(argv[2])) return 1;