Mercurial > lcfOS
view ide/compiler/errors.py @ 1:92df07bc2081
Initial import of compiler
author | windel |
---|---|
date | Sun, 18 Sep 2011 19:00:29 +0200 |
parents | |
children | 1784af239df4 |
line wrap: on
line source
""" Error handling routines """ class CompilerException(Exception): def __init__(self, msg, row=0, col=0): self.msg = msg self.row = row self.col = col def __repr__(self): return self.msg def __str__(self): return self.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])