Mercurial > lcfOS
view python/libs/compiler/core/errors.py @ 71:5351594349b0
Moved error to core
author | windel |
---|---|
date | Fri, 02 Nov 2012 14:05:00 +0100 |
parents | python/libs/compiler/errors.py@32078200cdd6 |
children |
line wrap: on
line source
""" Error handling routines """ class CompilerException(Exception): def __init__(self, msg, row=0, col=0, filename=None): self.msg = msg self.row = row self.col = col self.filename = filename def __repr__(self): return self.msg def __str__(self): return self.msg class ErrorNode: def __init__(self, row, col, msg): self.row, self.col = row,col self.msg = msg def Error(msg, node=None): if node is None: raise CompilerException(msg) else: raise CompilerException(msg, node.row, node.col) def printError(source, e): def printLine(row, txt): print(str(row)+':'+txt) if e.row == 0: print('Error: {0}'.format(e.msg)) else: lines = source.split('\n') prerow = e.row - 3 if prerow < 1: prerow = 1 afterrow = e.row + 3 if afterrow > len(lines): afterrow = len(lines) # print preceding source lines: for r in range(prerow, e.row): printLine(r, lines[r-1]) # print source line containing error: printLine(e.row, lines[e.row-1]) print(' '*(len(str(e.row)+':')+e.col-1) + '^ Error: {0}'.format(e.msg)) # print trailing source line: for r in range(e.row+1, afterrow+1): printLine(r, lines[r-1])