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;