comparison 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
comparison
equal deleted inserted replaced
141:11ebce0183a5 142:697bc543368c
49 as -> cl = cl; 49 as -> cl = cl;
50 50
51 // simplify address 51 // simplify address
52 lwasm_reduce_expr(as, cl -> addr); 52 lwasm_reduce_expr(as, cl -> addr);
53 53
54 // simplify data address
55 lwasm_reduce_expr(as, cl -> daddr);
56
54 // simplify each expression 57 // simplify each expression
55 for (le = cl -> exprs; le; le = le -> next) 58 for (le = cl -> exprs; le; le = le -> next)
56 lwasm_reduce_expr(as, le -> expr); 59 lwasm_reduce_expr(as, le -> expr);
57 60
58 if (cl -> len == -1) 61 if (cl -> len == -1 || cl -> dlen == -1)
59 { 62 {
60 // try resolving the instruction length 63 // try resolving the instruction length
61 // but don't force resolution 64 // but don't force resolution
62 if (cl -> insn >= 0 && instab[cl -> insn].resolve) 65 if (cl -> insn >= 0 && instab[cl -> insn].resolve)
63 { 66 {
64 (instab[cl -> insn].resolve)(as, cl, 0); 67 (instab[cl -> insn].resolve)(as, cl, 0);
65 if (cl -> len != -1) 68 debug_message(as, 100, "len = %d, dlen = %d", cl -> len, cl -> dlen);
69 if ((cl -> inmod == 0) && cl -> len >= 0 && cl -> dlen >= 0)
70 {
71 if (cl -> len == 0)
72 cl -> len = cl -> dlen;
73 else
74 cl -> dlen = cl -> len;
75 }
76 if (cl -> len != -1 && cl -> dlen != -1)
66 rc++; 77 rc++;
67 } 78 }
68 } 79 }
69 } 80 }
70 if (as -> errorcount > 0) 81 if (as -> errorcount > 0)