diff lwasm/pass3.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 2c24602be78f
children
line wrap: on
line diff
--- a/lwasm/pass3.c	Fri Aug 19 20:36:43 2011 -0600
+++ b/lwasm/pass3.c	Fri Aug 19 23:55:40 2011 -0600
@@ -51,18 +51,29 @@
 			// simplify address
 			lwasm_reduce_expr(as, cl -> addr);
 		
+			// simplify data address
+			lwasm_reduce_expr(as, cl -> daddr);
+
 			// simplify each expression
 			for (le = cl -> exprs; le; le = le -> next)
 				lwasm_reduce_expr(as, le -> expr);
 			
-			if (cl -> len == -1)
+			if (cl -> len == -1 || cl -> dlen == -1)
 			{
 				// try resolving the instruction length
 				// but don't force resolution
 				if (cl -> insn >= 0 && instab[cl -> insn].resolve)
 				{
 					(instab[cl -> insn].resolve)(as, cl, 0);
-					if (cl -> len != -1)
+					debug_message(as, 100, "len = %d, dlen = %d", cl -> len, cl -> dlen);
+					if ((cl -> inmod == 0) && cl -> len >= 0 && cl -> dlen >= 0)
+					{
+						if (cl -> len == 0)
+							cl -> len = cl -> dlen;
+						else
+							cl -> dlen = cl -> len;
+					}
+					if (cl -> len != -1 && cl -> dlen != -1)
 						rc++;
 				}
 			}