diff lwasm/pass1.c @ 336:30b2bad9b5eb

Factor some code for simplifying lines so it can be reused
author William Astle <lost@l-w.ca>
date Thu, 31 Jul 2014 17:20:11 -0600
parents 507f442dc71e
children 98f3e016cfd8
line wrap: on
line diff
--- a/lwasm/pass1.c	Fri May 02 21:30:25 2014 -0600
+++ b/lwasm/pass1.c	Thu Jul 31 17:20:11 2014 -0600
@@ -338,8 +338,6 @@
 			
 					if (as -> instruct == 0 || instab[opnum].flags & lwasm_insn_struct)
 					{
-						struct line_expr_s *le;
-
 						cl -> len = -1;
 						// call parse function
 						debug_message(as, 100, "len = %d, dlen = %d", cl -> len, cl -> dlen);
@@ -359,28 +357,7 @@
 						}
 						
 						/* do a reduction on the line expressions to avoid carrying excessive expression baggage if not needed */
-						as -> cl = cl;
-		
-						// simplify address
-						lwasm_reduce_expr(as, cl -> addr);
-		
-						// simplify each expression
-						for (le = cl -> exprs; le; le = le -> next)
-							lwasm_reduce_expr(as, le -> expr);
-						
-						/* try resolving the instruction as well */
-						if (cl -> insn >= 0 && instab[cl -> insn].resolve)
-						{
-							(instab[cl -> insn].resolve)(as, cl, 0);
-							if ((cl -> inmod == 0) && cl -> len >= 0 && cl -> dlen >= 0)
-							{
-								if (cl -> len == 0)
-									cl -> len = cl -> dlen;
-								else
-									cl -> dlen = cl -> len;
-							}
-						}
-
+						lwasm_reduce_line_exprs(cl);
 					}
 					else if (as -> instruct == 1)
 					{