More linestart hacking.

Not very successful though
This commit is contained in:
rocky
2018-01-27 01:47:56 -05:00
parent 5e13077fd2
commit 4725624d46
2 changed files with 12 additions and 2 deletions

View File

@@ -7,11 +7,12 @@ class LineMapWalker(SourceWalker):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(LineMapWalker, self).__init__(*args, **kwargs) super(LineMapWalker, self).__init__(*args, **kwargs)
self.source_linemap = {} self.source_linemap = {}
self.current_line_number = 0 self.current_line_number = 1
def write(self, *data): def write(self, *data):
"""Augment write routine to keep track of current line""" """Augment write routine to keep track of current line"""
for l in data: for l in data:
## print("XXX write: '%s'" % l)
for i in str(l): for i in str(l):
if i == '\n': if i == '\n':
self.current_line_number += 1 self.current_line_number += 1
@@ -20,6 +21,8 @@ class LineMapWalker(SourceWalker):
pass pass
return super(LineMapWalker, self).write(*data) return super(LineMapWalker, self).write(*data)
# Note n_expr needs treatment too
def default(self, node): def default(self, node):
"""Augment write default routine to record line number changes""" """Augment write default routine to record line number changes"""
if hasattr(node, 'linestart'): if hasattr(node, 'linestart'):

View File

@@ -211,7 +211,7 @@ class SourceWalker(GenericASTTraversal, object):
self.classes = [] self.classes = []
self.pending_newlines = 0 self.pending_newlines = 0
self.linestarts = linestarts self.linestarts = linestarts
self.line_number = 0 self.line_number = 1
self.ast_errors = [] self.ast_errors = []
# FIXME: have p.insts update in a better way # FIXME: have p.insts update in a better way
# modularity is broken here # modularity is broken here
@@ -997,6 +997,10 @@ class SourceWalker(GenericASTTraversal, object):
else: else:
n = node[0] n = node[0]
# if (hasattr(n, 'linestart') and n.linestart and
# hasattr(self, 'current_line_number')):
# self.source_linemap[self.current_line_number] = n.linestart
self.prec = PRECEDENCE.get(n.kind, -2) self.prec = PRECEDENCE.get(n.kind, -2)
if n == 'LOAD_CONST' and repr(n.pattr)[0] == '-': if n == 'LOAD_CONST' and repr(n.pattr)[0] == '-':
self.prec = 6 self.prec = 6
@@ -2296,6 +2300,9 @@ class SourceWalker(GenericASTTraversal, object):
elif typ == '{': elif typ == '{':
d = node.__dict__ d = node.__dict__
expr = m.group('expr') expr = m.group('expr')
if (hasattr(node, 'linestart') and node.linestart
and hasattr(node, 'current_line_number')):
self.source_linemap[self.current_line_number] = node.linestart
try: try:
self.write(eval(expr, d, d)) self.write(eval(expr, d, d))
except: except: