231 | 231 |
... 'PRINT "HELLO"\n'
|
232 | 232 |
... 'GOTO 20')
|
233 | 233 |
>>> num_errors = b.check_line_numbers()
|
234 | |
?UNDEFINED STATEMENT "20" IN: IMMEDIATE MODE COMMAND
|
|
234 |
?UNDEFINED STATEMENT "20" IN: GOTO 20 (immediate mode, text file line 3)
|
235 | 235 |
>>> b.strip_immediate_mode_commands()
|
236 | 236 |
>>> b.dump()
|
237 | 237 |
10 REM HELLO
|
|
249 | 249 |
self.lines.append(BasicLine(line))
|
250 | 250 |
|
251 | 251 |
def check_line_numbers(self):
|
252 | |
referenced = {'IMMEDIATE': []}
|
|
252 |
referenced = {}
|
253 | 253 |
defined = {}
|
254 | 254 |
errors = 0
|
|
255 |
text_file_line = 1
|
255 | 256 |
for line in self.lines:
|
256 | 257 |
if line.line_number is not None:
|
257 | |
defined[line.line_number] = line
|
258 | |
referenced[line.line_number] = line.referenced_line_numbers()
|
|
258 |
location = line.line_number
|
|
259 |
defined[location] = line
|
259 | 260 |
else:
|
260 | |
referenced['IMMEDIATE'] += line.referenced_line_numbers()
|
|
261 |
location = "IMMEDIATE MODE (line %d)" % text_file_line
|
|
262 |
defined[location] = "%s (immediate mode, text file line %d)" % \
|
|
263 |
(line, text_file_line)
|
|
264 |
referenced[location] = line.referenced_line_numbers()
|
|
265 |
text_file_line += 1
|
261 | 266 |
for (line_number, referenced_line_numbers) in referenced.iteritems():
|
262 | 267 |
for referenced_line_number in referenced_line_numbers:
|
263 | 268 |
if referenced_line_number not in defined:
|
264 | |
if line_number == 'IMMEDIATE':
|
265 | |
error_location = 'IMMEDIATE MODE COMMAND'
|
266 | |
else:
|
267 | |
error_location = defined[line_number]
|
268 | 269 |
print '?UNDEFINED STATEMENT "%s" IN: %s' % (
|
269 | |
referenced_line_number, error_location)
|
|
270 |
referenced_line_number, defined[line_number])
|
270 | 271 |
errors += 1
|
271 | 272 |
return errors
|
272 | 273 |
|