Mercurial > hg-old > index.cgi
diff src/macro.c @ 67:d5fe306f1ab1
Fixed numerous bugs in macro handling
author | lost |
---|---|
date | Mon, 05 Jan 2009 05:40:33 +0000 |
parents | 035b95a3690f |
children | cef25b0088e6 |
line wrap: on
line diff
--- a/src/macro.c Mon Jan 05 05:40:16 2009 +0000 +++ b/src/macro.c Mon Jan 05 05:40:33 2009 +0000 @@ -146,7 +146,7 @@ macrotab_t *m; char **args = NULL; // macro arguments - int nargs; // number of arguments + int nargs = 0; // number of arguments char *p2, *p3; @@ -183,6 +183,7 @@ if (p2[1]) p2++; } + p2++; } // have arg here @@ -238,6 +239,7 @@ nl -> nocodelen = 0; nl -> addrset = 0; nl -> symaddr = -1; + nl -> badop = 0; if (as -> linestail) as -> linestail -> next = nl; as -> linestail = nl; @@ -256,13 +258,13 @@ n = *p2 - '0'; if (n == 0) { - for (p3 = m -> name; p3; p3++) + for (p3 = m -> name; *p3; p3++) macro_add_to_buff(&linebuff, &bloc, &blen, *p3); continue; } if (n < 1 || n > nargs) continue; - for (p3 = args[n]; p3; p3++) + for (p3 = args[n - 1]; *p3; p3++) macro_add_to_buff(&linebuff, &bloc, &blen, *p3); continue; } @@ -283,13 +285,13 @@ if (n == 0) { - for (p3 = m -> name; p3; p3++) + for (p3 = m -> name; *p3; p3++) macro_add_to_buff(&linebuff, &bloc, &blen, *p3); continue; } if (n < 1 || n > nargs) continue; - for (p3 = args[n]; p3; p3++) + for (p3 = args[n - 1]; *p3; p3++) macro_add_to_buff(&linebuff, &bloc, &blen, *p3); continue; } @@ -312,11 +314,14 @@ as -> context = oldcontext; // clean up - while (nargs) + if (args) { - lwasm_free(args[--nargs]); + while (nargs) + { + lwasm_free(args[--nargs]); + } + lwasm_free(args); } - lwasm_free(args); // indicate a macro was expanded return 0;