Mercurial > hg > index.cgi
comparison lwasm/pass5.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 | 7317fbe024af |
children | 8764142b3192 |
comparison
equal
deleted
inserted
replaced
141:11ebce0183a5 | 142:697bc543368c |
---|---|
75 { | 75 { |
76 as -> cl = cl; | 76 as -> cl = cl; |
77 lwasm_reduce_expr(as, cl -> addr); | 77 lwasm_reduce_expr(as, cl -> addr); |
78 if (!exprok(as, cl -> addr)) | 78 if (!exprok(as, cl -> addr)) |
79 cnt++; | 79 cnt++; |
80 lwasm_reduce_expr(as, cl -> daddr); | |
81 if (!exprok(as, cl -> daddr)) | |
82 cnt++; | |
80 } | 83 } |
81 | 84 |
82 sl = as -> line_head; | 85 sl = as -> line_head; |
83 while (cnt > 0) | 86 while (cnt > 0) |
84 { | 87 { |
85 ocnt = cnt; | 88 ocnt = cnt; |
86 | 89 |
87 // find an unresolved address | 90 // find an unresolved address |
88 for ( ; sl && exprok(as, sl -> addr); sl = sl -> next) | 91 for ( ; sl && exprok(as, sl -> addr) && exprok(as, sl -> daddr); sl = sl -> next) |
89 /* do nothing */ ; | 92 /* do nothing */ ; |
90 | 93 |
91 // simplify address | 94 // simplify address |
92 for (cl = sl; cl; cl = cl -> next) | 95 for (cl = sl; cl; cl = cl -> next) |
93 { | 96 { |
94 as -> cl = sl; | 97 as -> cl = sl; |
95 lwasm_reduce_expr(as, sl -> addr); | 98 lwasm_reduce_expr(as, sl -> addr); |
96 | 99 |
97 if (exprok(as, cl -> addr)) | 100 if (exprok(as, cl -> addr)) |
98 { | 101 { |
99 if (0 == --cnt); | 102 if (0 == --cnt) |
103 return; | |
104 } | |
105 lwasm_reduce_expr(as, sl -> daddr); | |
106 if (exprok(as, cl -> addr)) | |
107 { | |
108 if (0 == --cnt) | |
100 return; | 109 return; |
101 } | 110 } |
102 } | 111 } |
103 | 112 |
104 if (cnt == ocnt) | 113 if (cnt == ocnt) |
112 { | 121 { |
113 if (!exprok(as, cl -> addr)) | 122 if (!exprok(as, cl -> addr)) |
114 { | 123 { |
115 lwasm_register_error(as, cl, "Cannot resolve line address"); | 124 lwasm_register_error(as, cl, "Cannot resolve line address"); |
116 } | 125 } |
126 if (!exprok(as, cl -> daddr)) | |
127 { | |
128 lwasm_register_error(as, cl, "Cannot resolve line data address"); | |
129 } | |
117 } | 130 } |
118 } | 131 } |
119 } | 132 } |