git @ Cat's Eye Technologies yucca / 68a8697
Better reporting for errors discovered in immediate mode commands. catseye 13 years ago
2 changed file(s) with 11 addition(s) and 11 deletion(s). Raw diff Collapse all Expand all
6767 ----
6868
6969 * Retain whitespace exactly when dumping/transforming a program.
70 * Better reporting for errors discovered in immediate mode commands.
7170
7271 Plans
7372 -----
+11
-10
yucca less more
231231 ... 'PRINT "HELLO"\n'
232232 ... 'GOTO 20')
233233 >>> 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)
235235 >>> b.strip_immediate_mode_commands()
236236 >>> b.dump()
237237 10 REM HELLO
249249 self.lines.append(BasicLine(line))
250250
251251 def check_line_numbers(self):
252 referenced = {'IMMEDIATE': []}
252 referenced = {}
253253 defined = {}
254254 errors = 0
255 text_file_line = 1
255256 for line in self.lines:
256257 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
259260 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
261266 for (line_number, referenced_line_numbers) in referenced.iteritems():
262267 for referenced_line_number in referenced_line_numbers:
263268 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]
268269 print '?UNDEFINED STATEMENT "%s" IN: %s' % (
269 referenced_line_number, error_location)
270 referenced_line_number, defined[line_number])
270271 errors += 1
271272 return errors
272273