diff lwasm/pass1.c @ 346:a82c55070624

Added expression parsing infrastructure and misc fixes
author lost@starbug
date Sat, 27 Mar 2010 19:04:03 -0600
parents 7416c3f9c321
children 1649bc7bda5a
line wrap: on
line diff
--- a/lwasm/pass1.c	Thu Mar 25 23:17:54 2010 -0600
+++ b/lwasm/pass1.c	Sat Mar 27 19:04:03 2010 -0600
@@ -22,6 +22,7 @@
 #include <config.h>
 
 #include <stdio.h>
+#include <string.h>
 
 #include <lw_alloc.h>
 #include <lw_string.h>
@@ -78,11 +79,10 @@
 		printf("%s\n", line);
 		
 		cl = lw_alloc(sizeof(line_t));
-		cl -> next = NULL;
+		memset(cl, 0, sizeof(line_t));
 		cl -> prev = as -> line_tail;
-		cl -> len = -1;
 		cl -> insn = -1;
-		cl -> err = NULL;
+		cl -> as = as;
 		if (!as -> line_tail)
 		{
 			as -> line_head = cl;
@@ -95,9 +95,10 @@
 			te = lw_expr_build(lw_expr_type_special, lwasm_expr_linelen, cl -> prev);
 			cl -> addr = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, cl -> prev -> addr, te);
 			lw_expr_destroy(te);
-			lw_expr_simplify(cl -> addr);
+			lw_expr_simplify(cl -> addr, as);
 		}
 		as -> line_tail = cl;
+		as -> cl = cl;
 
 		// blank lines don't count for anything
 		// except a local symbol context break
@@ -222,6 +223,7 @@
 				// no parse func means operand doesn't matter
 				if (instab[opnum].parse)
 				{
+					cl -> len = -1;
 					// call parse function
 					(instab[opnum].parse)(as, cl, &p1);