Mercurial > hg-old > index.cgi
diff lwasm/pseudo.c @ 236:a58f49a77441
Added os9 target, pragma to control whether $ localizes a symbol, and fixed some condition nesting bugs
author | lost |
---|---|
date | Fri, 14 Aug 2009 03:22:26 +0000 |
parents | aa0056ca7319 |
children | 31231d1c87e6 |
line wrap: on
line diff
--- a/lwasm/pseudo.c Fri Jun 12 05:25:41 2009 +0000 +++ b/lwasm/pseudo.c Fri Aug 14 03:22:26 2009 +0000 @@ -757,6 +757,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -779,6 +780,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -799,15 +801,14 @@ return; } - for (p2 = *p; *p2 && !isspace(*p2); p2++) + for (p2 = *p; **p && !isspace(**p); (*p)++) /* do nothing */ ; - sym = lwasm_alloc(p2 - *p + 1); - memcpy(sym, *p, p2 - *p); - sym[p2 - *p] = '\0'; - - *p = p2; + sym = lwasm_alloc(*p - p2 + 1); + memcpy(sym, p2, *p - p2); + sym[*p - p2] = '\0'; +// fprintf(stderr, "STUFF: %s; '%s'; '%s' (%d)\n", p2, *p, sym, as -> passnum); se = lwasm_find_symbol(as, sym, l -> context); if (!se) se = lwasm_find_symbol(as, sym, -1); @@ -831,10 +832,11 @@ lwasm_symbol_ent_t *se; char *sym; char *p2; - + if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -864,6 +866,7 @@ *p = p2; +// fprintf(stderr, "STUFF2: %s; '%s'; '%s' (%d)\n", *p, p2, sym, as -> passnum); se = lwasm_find_symbol(as, sym, l -> context); if (!se) se = lwasm_find_symbol(as, sym, -1); @@ -882,6 +885,38 @@ } } +OPFUNC(pseudo_ifp1) +{ + if (as -> skipcond && !(as -> skipmacro)) + { + as -> skipcount++; + skip_operand(p); + return; + } + + if (as -> passnum != 1) + { + as -> skipcond = 1; + as -> skipcount = 1; + } +} + +OPFUNC(pseudo_ifp2) +{ + if (as -> skipcond && !(as -> skipmacro)) + { + as -> skipcount++; + skip_operand(p); + return; + } + + if (as -> passnum != 2) + { + as -> skipcond = 1; + as -> skipcount = 1; + } +} + OPFUNC(pseudo_ifeq) { int v1; @@ -890,6 +925,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -911,6 +947,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -932,6 +969,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -953,6 +991,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; } @@ -974,6 +1013,7 @@ if (as -> skipcond && !(as -> skipmacro)) { as -> skipcount++; + skip_operand(p); return; }