Mercurial > lcfOS
diff python/ppci/errors.py @ 293:6aa721e7b10b
Try to improve build sequence
author | Windel Bouwman |
---|---|
date | Thu, 28 Nov 2013 20:39:37 +0100 |
parents | bd2593de3ff8 |
children | 917eab04b8b7 |
line wrap: on
line diff
--- a/python/ppci/errors.py Wed Nov 27 08:06:42 2013 +0100 +++ b/python/ppci/errors.py Thu Nov 28 20:39:37 2013 +0100 @@ -19,43 +19,21 @@ self.row = self.col = 0 def __repr__(self): - if self.row: - return '"{0}" at row {1}'.format(self.msg, self.row) - else: - return '"{0}"'.format(self.msg) + return '"{}"'.format(self.msg) -def printError(source, e): - def printLine(row, txt): - print(str(row)+':'+txt) - if e.row == 0 or True: - print('Error: {0}'.format(e.msg)) - else: - lines = source.split('\n') - ro, co = e.row, e.col - prerow = ro - 2 - if prerow < 1: - prerow = 1 - afterrow = ro + 3 - if afterrow > len(lines): - afterrow = len(lines) - - # print preceding source lines: - for r in range(prerow, ro): - printLine(r, lines[r-1]) - # print source line containing error: - printLine(ro, lines[ro-1]) - print(' '*(len(str(ro)+':')+co-1) + '^ Error: {0}'.format(e.msg)) - # print trailing source line: - for r in range(ro+1, afterrow+1): - printLine(r, lines[r-1]) class DiagnosticsManager: def __init__(self): self.diags = [] + self.sources = {} self.logger = logging.getLogger('diagnostics') + def addSource(self, name, src): + self.logger.info('Adding source {}'.format(name)) + self.sources[name] = src + def addDiag(self, d): - self.logger.info(str(d.msg)) + self.logger.warning(str(d.msg)) self.diags.append(d) def error(self, msg, loc): @@ -63,13 +41,43 @@ def clear(self): del self.diags[:] + self.sources.clear() - def printErrors(self, src): + def printErrors(self): if len(self.diags) > 0: print('==============') print('{0} Errors'.format(len(self.diags))) for d in self.diags: print('==============') - printError(src, d) + self.printError(d) print('==============') + def printError(self, e): + def printLine(row, txt): + print(str(row)+':'+txt) + print(type(e), e, e.msg) + if not e.loc: + print('Error: {0}'.format(e)) + else: + if e.loc.filename not in self.sources: + print('Error: {0}'.format(e)) + return + source = self.sources[e.loc.filename] + lines = source.split('\n') + ro, co = e.row, e.col + prerow = ro - 2 + if prerow < 1: + prerow = 1 + afterrow = ro + 3 + if afterrow > len(lines): + afterrow = len(lines) + + # print preceding source lines: + for r in range(prerow, ro): + printLine(r, lines[r-1]) + # print source line containing error: + printLine(ro, lines[ro-1]) + print(' '*(len(str(ro)+':')+co-1) + '^ Error: {0}'.format(e.msg)) + # print trailing source line: + for r in range(ro+1, afterrow+1): + printLine(r, lines[r-1])