diff lwasm/pass5.c @ 142:697bc543368c

Implement distinction between . and * for OS9 modules
author lost@l-w.ca
date Fri, 19 Aug 2011 23:55:40 -0600
parents 7317fbe024af
children 8764142b3192
line wrap: on
line diff
--- a/lwasm/pass5.c	Fri Aug 19 20:36:43 2011 -0600
+++ b/lwasm/pass5.c	Fri Aug 19 23:55:40 2011 -0600
@@ -77,6 +77,9 @@
 		lwasm_reduce_expr(as, cl -> addr);
 		if (!exprok(as, cl -> addr))
 			cnt++;
+		lwasm_reduce_expr(as, cl -> daddr);
+		if (!exprok(as, cl -> daddr))
+			cnt++;
 	}
 
 	sl = as -> line_head;
@@ -85,7 +88,7 @@
 		ocnt = cnt;
 		
 		// find an unresolved address
-		for ( ; sl && exprok(as, sl -> addr); sl = sl -> next)
+		for ( ; sl && exprok(as, sl -> addr) && exprok(as, sl -> daddr); sl = sl -> next)
 			/* do nothing */ ;
 
 		// simplify address
@@ -96,7 +99,13 @@
 		
 			if (exprok(as, cl -> addr))
 			{
-				if (0 == --cnt);
+				if (0 == --cnt)
+					return;
+			}
+			lwasm_reduce_expr(as, sl -> daddr);
+			if (exprok(as, cl -> addr))
+			{
+				if (0 == --cnt)
 					return;
 			}
 		}
@@ -114,6 +123,10 @@
 			{
 				lwasm_register_error(as, cl, "Cannot resolve line address");
 			}
+			if (!exprok(as, cl -> daddr))
+			{
+				lwasm_register_error(as, cl, "Cannot resolve line data address");
+			}
 		}
 	}
 }