Mercurial > hg-old > index.cgi
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);