Mercurial > lcfOS
comparison python/ppci/errors.py @ 215:c1ccb1cb4cef
Major changes in c3 frontend
author | Windel Bouwman |
---|---|
date | Fri, 05 Jul 2013 13:00:03 +0200 |
parents | 5e391d9a3381 |
children | 1c7364bd74c7 |
comparison
equal
deleted
inserted
replaced
214:6875360e8390 | 215:c1ccb1cb4cef |
---|---|
9 def __init__(self, msg, loc=None): | 9 def __init__(self, msg, loc=None): |
10 self.msg = msg | 10 self.msg = msg |
11 self.loc = loc | 11 self.loc = loc |
12 if loc: | 12 if loc: |
13 assert type(loc) is SourceLocation, '{0} must be SourceLocation'.format(type(loc)) | 13 assert type(loc) is SourceLocation, '{0} must be SourceLocation'.format(type(loc)) |
14 self.row = loc.row | |
15 self.col = loc.col | |
16 else: | |
17 self.row = self.col = None | |
18 | |
14 def __repr__(self): | 19 def __repr__(self): |
15 if self.loc: | 20 if self.row: |
16 return 'Compilererror: "{0}" at row {1}'.format(self.msg, self.loc.row) | 21 return 'Compilererror: "{0}" at row {1}'.format(self.msg, self.row) |
17 else: | 22 else: |
18 return 'Compilererror: "{0}"'.format(self.msg) | 23 return 'Compilererror: "{0}"'.format(self.msg) |
19 | 24 |
20 def printError(source, e): | 25 def printError(source, e): |
21 def printLine(row, txt): | 26 def printLine(row, txt): |
22 print(str(row)+':'+txt) | 27 print(str(row)+':'+txt) |
23 if e.loc.row == 0: | 28 if e.loc.row == 0: |
24 print('Error: {0}'.format(e.msg)) | 29 print('Error: {0}'.format(e.msg)) |
25 else: | 30 else: |
26 lines = source.split('\n') | 31 lines = source.split('\n') |
27 ro, co = e.loc.row, e.loc.col | 32 ro, co = e.row, e.col |
28 prerow = ro - 2 | 33 prerow = ro - 2 |
29 if prerow < 1: | 34 if prerow < 1: |
30 prerow = 1 | 35 prerow = 1 |
31 afterrow = ro + 3 | 36 afterrow = ro + 3 |
32 if afterrow > len(lines): | 37 if afterrow > len(lines): |
43 printLine(r, lines[r-1]) | 48 printLine(r, lines[r-1]) |
44 | 49 |
45 class DiagnosticsManager: | 50 class DiagnosticsManager: |
46 def __init__(self): | 51 def __init__(self): |
47 self.diags = [] | 52 self.diags = [] |
53 | |
48 def addDiag(self, d): | 54 def addDiag(self, d): |
49 self.diags.append(d) | 55 self.diags.append(d) |
56 | |
50 def error(self, msg, loc): | 57 def error(self, msg, loc): |
51 self.addDiag(CompilerError(msg, loc)) | 58 self.addDiag(CompilerError(msg, loc)) |
59 | |
52 def clear(self): | 60 def clear(self): |
53 del self.diags[:] | 61 del self.diags[:] |
62 | |
54 def printErrors(self, src): | 63 def printErrors(self, src): |
55 if len(self.diags) > 0: | 64 if len(self.diags) > 0: |
56 print('{0} Errors'.format(len(self.diags))) | 65 print('{0} Errors'.format(len(self.diags))) |
57 for d in self.diags: | 66 for d in self.diags: |
58 printError(src, d) | 67 printError(src, d) |