|
4 | 4 |
|
5 | 5 | from . import opcodes
|
6 | 6 | from .nocomment import remove_comments
|
| 7 | +from .util import garbage_collect |
7 | 8 |
|
8 | 9 | TEXT, DATA, BSS = 'text', 'data', 'bss'
|
9 | 10 |
|
@@ -139,8 +140,7 @@ def parse_line(self, line):
|
139 | 140 | return label, opcode, args
|
140 | 141 |
|
141 | 142 |
|
142 |
| - def parse(self, text): |
143 |
| - lines = remove_comments(text) |
| 143 | + def parse(self, lines): |
144 | 144 | parsed = [self.parse_line(line) for line in lines]
|
145 | 145 | return [p for p in parsed if p is not None]
|
146 | 146 |
|
@@ -271,10 +271,13 @@ def assembler_pass(self, lines):
|
271 | 271 | raise Exception('Unknown opcode or directive: %s' % opcode)
|
272 | 272 | self.finalize_sections()
|
273 | 273 |
|
274 |
| - def assemble(self, lines): |
| 274 | + def assemble(self, text): |
| 275 | + lines = remove_comments(text) |
275 | 276 | self.init(1) # pass 1 is only to get the symbol table right
|
276 | 277 | self.assembler_pass(lines)
|
277 | 278 | self.symbols.set_bases(self.compute_bases())
|
| 279 | + garbage_collect('before pass2') |
278 | 280 | self.init(2) # now we know all symbols and bases, do the real assembler pass, pass 2
|
279 | 281 | self.assembler_pass(lines)
|
| 282 | + garbage_collect('after pass2') |
280 | 283 |
|
0 commit comments