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;
 	}