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)