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