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])